int lengthOfLongestSubstring(string s) {
unordered_set<char> cs;
size_t n = s.size();
int* num = new int[n];
int start = 0;
for (int i = 0; i < n; i++) {
if (start < n && cs.count(s[start])) {
num[i] = cs.size();
cs.erase(cs.begin(), cs.find(s[start]));
cs.erase(s[start]);
}
if (start < n && !cs.count(s[start])) {
cs.insert(s[start]);
start++;
}
}
return *max_element(num,num+n)<cs.size()? cs.size(): *max_element(num,num+n);
}
不是他的错误,而是你对unordered_set理解有错误造成的
cs.erase(cs.begin(),cs.find(s[start]);//因为cs是hash表,他的内部数据存放不是线性的,不能保证,s[start]一定在尾部,也可能是在头部,所以你的这种erase不能一定删除正确。vs是放在尾部,所以正确,而gcc是放在头部,所以你的题目错误
应该是使用的规则不同导致的,vs2022使用的规则比较新,可能有些异议的语法,比如自增和自减这块是问题出现的高频区