题目
分析
典型的滑动窗口题目。
一个窗口用两个指针left,right来维护,不断移动right指针,right指针的位置只有两种情况:
- [left,right)的这个窗口里没有right指针指向的字符,那么那么就继续移动right指针
- [left,right)的这个窗口里有right指针指向的字符,那么就将left指针移动到这个重复出现的字符的下一个位置。
代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if (s.empty()){
return 0;
}
int start = 0, res = 1;
unordered_map<char, int> mp;
mp[s[0]] = 0;
for (int i = 1; i < s.size(); i++){
if (mp.count(s[i]) != 0 && mp[s[i]] >= start){
start = mp[s[i]] + 1;
}
mp[s[i]] = i;
res = max(res, i - start + 1);
}
return res;
}
};
网友评论