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


};