C++ 我已经在leetcode最长子字符串上完成了这个问题,没有重复字符

C++ 我已经在leetcode最长子字符串上完成了这个问题,没有重复字符,c++,string,hashmap,substring,C++,String,Hashmap,Substring,我的代码: class Solution { public: int lengthOfLongestSubstring(string s) { if(s.length()==0){ return 0; } unordered_map<char, int> map; int j=0,c=0,x=c,st=0; for(int i=0;i&

我的代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        
        if(s.length()==0){
            return 0;
        }

        
        unordered_map<char, int> map;
        int j=0,c=0,x=c,st=0;
        for(int i=0;i<s.length();i++){
            if(map.find(s[i])==map.end()){
                map[s[i]]++;
                x++;
                continue;
            }
            else{
                auto it1=map.find(s[j]);
                auto it2=map.find(s[i-1]);
                map.erase(it1, it2);
                j++;
                i=j-1;
                if(x>c){
                    c=x;
                    x=0;
                    continue;
                }
            }
        }
        
        if(x>c){
            c=x;
         }
        
        return c;
        
    }
};
类解决方案{
公众:
int lengthOfLongestSubstring(字符串s){
如果(s.length()==0){
返回0;
}
无序地图;
int j=0,c=0,x=c,st=0;
对于(int i=0;ic){
c=x;
x=0;
继续;
}
}
}
如果(x>c){
c=x;
}
返回c;
}
};
并获取以下错误:

第1988行:Char 19:运行时错误:对类型为“std::\uu detail::\u Hash\u node”(hashtable.h)的空指针的成员调用
小结:UndefinedBehaviorSanitizer:undefined behavior/usr/bin/./lib/gcc/x86_64-linux-gnu/9/../../../../../../include/c++/9/bits/hashtable.h:1997:19

有人能解释一下为什么我会出现这个错误吗?

它是由以下行引起的:
map.erase(it1,it2)
您需要检查迭代器是否是映射的结尾。Offtopic:您不需要
无序映射
使用简单数组和字符值作为索引,这样会快得多。一般来说:删除整个
无序映射
范围通常没有意义,因为您无法控制元素的放置顺序,这完全取决于所使用的散列函数。除了完全清除外,当然……哦,谢谢大家的帮助