如图,力扣第三题,相同的代码,力扣和vs2022得到的结果不同,怎么解决

img

img

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使用的规则比较新,可能有些异议的语法,比如自增和自减这块是问题出现的高频区