美文网首页
记 leetCode 中第三题的解法

记 leetCode 中第三题的解法

作者: 查无此人_chazz | 来源:发表于2018-03-02 16:33 被阅读0次

    题目如下:
    Given a string, find the length of the longest substring without repeating characters.
    Examples:

    Given "abcabcbb", the answer is "abc", which the length is 3.

    Given "bbbbb", the answer is "b", with the length of 1.

    Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.


    希望能使用O(n)时间复杂度来解决这个问题
    代码如下:

    public int lengthOfLongestSubstring(String s) {
            if(s==null||s.length()==0) { return 0; } // 做非空判断
            if(s.length()==1) { return 1; } //由于下方的代码 在截取字符串的时候要从第二位开始截取并判断 所以在字符串长度为1时 直接返回1即可
    
            int max = 1;//在排除上方的情况以后 字符串的长度应该从2 开始 那么结果的最小值应该是1
            int nowIndex = 0;// 从最开始开始索引
            for(int i = 1;i<s.length();i++) {
                int indexOf = s.substring(nowIndex,i).indexOf(s.substring(i, i+1));//判断当前 i 对应的字符在当前字符串段中是否存在 (这一部分是最耗费内存和时间的操作,特别是两个substring操作会产生新的字符串对象并填充到字符串缓存池中)
                if(indexOf  > -1) { //存在
                    nowIndex += (indexOf+1); //字符段位置应该前移到 i 字符串对应的位置
                }else {//不存在
                    max = Math.max(i-nowIndex+1, max);//判断新长度和max谁比较大一些
                }
            }
            return max;
        }
    

    以上为解决方案;
    暂时记录,如想到更好的方案再回来补充……

    相关文章

      网友评论

          本文标题:记 leetCode 中第三题的解法

          本文链接:https://www.haomeiwen.com/subject/yxiaxftx.html