无重复字符的最长子串

kitten 发布于 2024-02-03 171 次阅读


给定一个字符串S,找到其不含有重复字符的最长子串的长度。

例:

输入:"abcabca" 输出:3

输入:"kitten" 输出:3

对于这题的话,其实思路还是比较清晰的,我们可以使用双指针的做法,L指针指向最左边,然后让一个R指针也是从最左边开始不断向右移动,当R指针指向字符和L指针指向字符相同时,我们就让L指针向右移动一位。但是此时要注意一点是:L移动后指向的字符可能是已经被R指针略过了,这时候L和R所对应截取的子串中还是会有重复字符,因此我们要再进行一次判断,判断子串中是否含有L移动后指向的字符(该操作可以由哈希表来完成),没有就不会有问题,有的话我们就需要将L指向当前子串中重复字符的位置,这样就能成功解决本题,下面是代码:

class Solution {
    public int longestChildString(String s) {
        if (s.length()==0) return 0;
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        int max = 0;
        int L = 0;
        for(int i = 0; i < s.length(); i ++){
            if(map.containsKey(s.charAt(i))){
                L = Math.max(L,map.get(s.charAt(i)) + 1);
            }
            map.put(s.charAt(i),i);
            max = Math.max(max,i-L+1);
        }
        return max;       
    }
}