智障程序猿2 2022-01-23 01:12 采纳率: 100%
浏览 70
已结题

如图,力扣第三题,相同的代码,力扣和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);
}
  • 写回答

2条回答 默认 最新

  • 真相重于对错 2022-01-24 14:10
    关注

    不是他的错误,而是你对unordered_set理解有错误造成的
    cs.erase(cs.begin(),cs.find(s[start]);//因为cs是hash表,他的内部数据存放不是线性的,不能保证,s[start]一定在尾部,也可能是在头部,所以你的这种erase不能一定删除正确。vs是放在尾部,所以正确,而gcc是放在头部,所以你的题目错误

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月23日