3、无重复字符的最长子串

题目:

3、无重复字符的最长子串_第1张图片

解答:

划窗。创建哈希表来存储字母出现个数。两个指针left、right来表示窗口前后边界。

遍历右指针,每次将右指针的字符对应的哈希表value++。然后判断该key的value是否大于1,如果大于1意味着有重复字符了,将左指针右移弹出一个字符,该字符的value--,重复这个步骤直到right指向的字符的value为1,即是该right边界的最大可能字符串。然后更新ans,ans=max(ans,right-left+1)

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = s.size();
        int left=0,right=0;
        int ans = 0;
        unordered_map cnt;
        for(right;right1){
                cnt[s[left]]--;
                left++;
            }
            ans = max(ans,right-left+1);
        }
        return ans;
    }
};

时间复杂度O(n) n为字符串长度

空间复杂度O(n),如果字符串s的字符限定范围,比如本题中只可以是数字符号空格字母,也可以视作是O(1),哈希表长度为常数

你可能感兴趣的:(#,滑动窗口,leetcode,leetcode,算法)