Java教程

最长不含重复字符的子字符串 算法

本文主要是介绍最长不含重复字符的子字符串 算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目:

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

 

运行截图:

在力扣尝试多种方法,最好的结果是使用字符数组,用时、内存消耗击败90%以上Java提交者。

保存下来吹下牛哈!

 

 

源代码:

class Solution {

    public int lengthOfLongestSubstring(String s) {
        final int SIZE = s.length();  //源字符串长度
        if (SIZE<2) {
            return SIZE;
        }
        char[] str = new char[SIZE];  //用字符数组保存字符串
        s.getChars(0, SIZE, str, 0);
        s=null;
        int start = 0;    //子串起始点
        int end = 1;    //子串末尾
        int result = 1;  //最长子串长度
        boolean flag = false;  //是否有重复字符
        int i=0;
        
        while (end < SIZE) {
            flag = true;
            for (i=start; i<end; ++i) {  //检查新加入的字符str[end]是否重复
                if (str[i] == str[end]) {
                    flag = false;
                    start = ++i;   //在i位置重复,新子串从i+1开始
                    break;
                }
            }
            ++ end;  //继续往前搜索
            if (flag) {  //flag == true 没有发现重复字符
                if (end > start + result) {  //发现更好结果
                    result = end - start;
                }
                
            }
            
            if (SIZE < start + result){  //不可能有更好结果,提前结束
                break;
            }
        }
        return result;
    }
    
}

 

这篇关于最长不含重复字符的子字符串 算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!