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:您不需要无序映射
使用简单数组和字符值作为索引,这样会快得多。一般来说:删除整个无序映射
范围通常没有意义,因为您无法控制元素的放置顺序,这完全取决于所使用的散列函数。除了完全清除外,当然……哦,谢谢大家的帮助