https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/
前几次没通过是因为没有处理好,出现重复字符时i应该回到哪个位置。
原本使用单纯的for循环,每次i++,重复就i--以回到重复位置,但实际上,应该回到重复字符的后一位重新开始,所以用while循环,不重复i++,重复则i=i-len+1,len是当前未重复的字符串长度。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
int len = 0;
int ans = 0;
map<char, int> myMap;
if(s == "") return 0;
int i = 0;
while(i < s.size()){
if(myMap[s[i]] == 0){
myMap[s[i]] = 1;
//printf("111%c111\n", s[i]);
len++;
i++;
}else{
ans = max(ans, len);
i = i - len + 1;
//printf("%d\n", ans);
len = 0;
myMap.clear();
}
}
ans = max(ans, len);
return ans;
}
};
京公网安备 11010502036488号