//示例为"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右移。每次更新子串长度时,我们将当前的子串长度和之前的最大子串长度取最大值。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报