已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。
4天前关闭。
Improve this question的
到目前为止,我认为这看起来很棒。我遇到的唯一问题是从集合中删除元素并递增左指针。我得到一些错误的输出,而一些正确的。需要一些逻辑上的帮助。这是一个典型的leet代码问题3,其中要求打印最大数量的不重复字符串字符。我面临的问题是在循环中
if (iter != stringSet.end()) {
while (*stringSet.begin() != c) {
stringSet.erase(stringSet.begin());
left++;
}
字符串
我试过“abcabcbb”,我应该得到3,但我得到了4。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left = 0;
int right = 0;
int maxlength = 0;
set<char> stringSet;
for (;right < s.length(); right++) {
char c = s[right];
auto iter = stringSet.find(c);
if (iter != stringSet.end()) {
while (*stringSet.begin() != c) {
stringSet.erase(stringSet.begin());
left++;
}
} else {
stringSet.insert(c);
maxlength = max(maxlength, right-left+1);
}
}
return maxlength;
}
};
型
1条答案
按热度按时间ujv3wf0j1#
问题是,当您找到一个重复的字符时,您只是从集合的开头擦除元素,直到重复的字符被删除。但是,这种方法是不正确的,因为集合中可能有其他字符仍然存在于当前子字符串中。
要解决此问题,您需要从集合中擦除元素,直到删除重复字符,并调整左指针以移动到删除的重复字符之后的位置。
字符串