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; } };