無重複最長子串

27 阅读1分钟

題目

leetcode.cn/problems/lo…

題解

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
unordered_map<char,int>mp;
        int start=0;
        int maxlength=0;
        for(int i=0;i<s.size();i++){
            if(mp.find(s[i])!=mp.end()&&mp[s[i]]>=start){
                start=mp[s[i]]+1;
            }
            mp[s[i]]=i;
            maxlength=max(maxlength,i-start+1);
        }
        return maxlength;
    }
};
  • 用一個窗口維持當前不重複的子串

  • unordered_map<char, int> 存每個字符出現的最新位置

  • 如果當前字符已出現,滑動窗口左邊界 start 往右移,移到重複字符的下一位

  • 實時更新最長子串長度 maxLength

is[i]startmap長度(i-start+1)maxLength
0a0a:011
1b0a:0, b:122
2c0a:0, b:1, c:233
3a0→1a:3,...33
4b1→2b:4,...33
5c2→3c:5,...33
6b3→5b:6,...23
7b5→7b:713