主要的思路是雙指針+ hash_map。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.size() <= 1) return s.size();
map<char, int> k;
int max_length = 0;
int start(0); int end(0);
while(end < s.size()){
max_length = max_length > end - start? max_length: end - start; //每走一步都對比一下
if(k.count(s[end])) start = start > k[s[end]] + 1 ? start : k[s[end]] + 1; // 當有重複的時候,start 指針要向重複字母開始的一位後一位賦值。
k[s[end]] = end; //這裏比較巧妙。不用判斷是否是有重複字母,一直更新就好了。
end ++;
}
return max_length > end -start? max_length: end-start; // 主要是爲了防止end 指針在最後一位的情況。
}
};