思路:
寻找每个字符串的起点位置,也就是每个子串中,最位置最靠后的出现过不止一次的字符。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.size() == 0) return 0;
map<char, int> last_pos;
int ans = 1;
int last_same = 0;
last_pos[s[0]] = 1;
for (int i = 2; i <= s.size(); i++) {
if (last_pos[s[i-1]]) {
last_same = max(last_pos[s[i-1]], last_same);
}
ans = max(ans, i - last_same);
last_pos[s[i-1]] = i;
}
return ans;
}
};