思路一:哈希表记录每个字符最后一次出现的位置
int lengthOfLongestSubstring(string s) { if(s.empty())return 0; int n = s.length(); vector<int> index(256, -1); int begin = -1, maxlen = 0; for(int i = 0;i < n;++i){ begin = max(index[s[i]], begin); maxlen = max(maxlen, i - begin); index[s[i]] = i; } return maxlen; }
思路二:滑动窗口
int lengthOfLongestSubstring(string s) {
int left = 0, right = 0, len = s.length(), maxLen = 0;
unordered_map<char, int> m;
while(right < len){
char c1 = s[right];
++m[c1];
++right;
while(m[c1] > 1){
char c2 = s[left];
--m[c2];
++left;
}
maxLen = max(maxLen, right - left);
}
return maxLen;
}