当前位置:   article > 正文

查找不含有重复字符的最长子串的长度_查找不含有重复字符串的最长子串

查找不含有重复字符串的最长子串

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

public int lengthOfLongestSubstring(String s) {
         int[] last = new int[128];
        int rs = 0;
        int start = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            start = Math.max(start,last[c]);
            rs = Math.max(rs,i-start+1);
            last[c] = i+1;
        }
        return rs;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

以这个字符串为例:abcabcbb,当i等于3时,也就是指向了第二个a, 此时我就需要查之前有没有出现过a, 如果出现了是在哪一个位置出现的。然后通过last[index] 查到等于1, 也就是说,如果start 依然等于0的话,那么当前窗口就有两个a了,也就是字符串重复了,所以我们需要移动当前窗口的start指针,移动到什么地方呢?移动到什么地方,窗口内就没有重复元素了呢? 对了,就是a上一次出现的位置的下一个位置,就是1 + 1 = 2。当start == 2, 当前窗口就没有了重复元素,那么以当前字符为结尾的最长无重复子串就是bca,然后再和之前的res取最大值。然后i指向后面的位置,按照同样思路计算。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/685073
推荐阅读
相关标签
  

闽ICP备14008679号