主要的思路是双指针+ 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 指针在最后一位的情况。
}
};