//示例为"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;
}
};
不知道哪错了,求指一下
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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右移。每次更新子串长度时,我们将当前的子串长度和之前的最大子串长度取最大值。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
- ¥20 关于URL获取的参数,无法执行二选一查询
- ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
- ¥15 marlin编译错误,如何解决?
- ¥15 有偿四位数,节约算法和扫描算法
- ¥15 VUE项目怎么运行,系统打不开
- ¥50 pointpillars等目标检测算法怎么融合注意力机制
- ¥20 Vs code Mac系统 PHP Debug调试环境配置
- ¥60 大一项目课,微信小程序
- ¥15 求视频摘要youtube和ovp数据集