忘川睡着了zZ 2023-02-17 18:50 采纳率: 66.7%
浏览 21
已结题

不知道哪错了,求指一下

//示例为"abcabcbb",结果应为3,但是我是5
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        queue<char>q;
        int num=0;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]==q.front()){q.pop();}
        q.push(s[i]);
        int a=q.size();
        num=max(num,a);
    }
    return num;
    }
};
  • 写回答

2条回答 默认 最新

  • Oops_GTC 2023-02-17 19:13
    关注

    这段代码的问题在于当queue中不包含s[i]时,你仍然调用了 'q.frontq.front()来比较它和s[i]是否相等。当queue为空时,这个操作将导致运行时错误。另外,即使queue中已经包含s[i],你仍然需要将s[i]放入queue中以便计算当前的子串长度。因此,你需要修改代码来处理这些情况。

    以下是你可以采用的一种解决方案:

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            unordered_set<char> chars; // 存储当前子串中出现的字符
            int maxLength = 0;
            int i = 0, j = 0;
            while (i < s.size() && j < s.size()) {
                if (chars.find(s[j]) == chars.end()) {
                    chars.insert(s[j++]);
                    maxLength = max(maxLength, j - i);
                } else {
                    chars.erase(s[i++]);
                }
            }
            return maxLength;
        }
    };
    
    
    

    在这个解决方案中,我们使用了一个unordered_set来存储当前子串中出现的字符。我们用i和j来表示子串的左右边界。当s[j]没有出现在子串中时,我们将其插入unordered_set中,并将j右移。如果s[j]已经出现在子串中,我们将s[i]从unordered_set中删除,并将i右移。每次更新子串长度时,我们将当前的子串长度和之前的最大子串长度取最大值。

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

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 修改了问题 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集