leetcode第三题,为什么统计到一般就不统计了。延长字符串长度和缩短字符串长度都不行
修改成 if list[j] in test or (j == len(list1) - 1 and list[j] not in test):
这个问题可能是由于没有正确更新左边界导致的。在延长字符串长度时,如果发现当前字符已经在窗口中出现过,需要将左边界移动到上一次该字符出现的位置的下一个位置,而不是直接将左边界移动到当前字符位置的下一个位置。另外,可以使用一个哈希表来记录每个字符最后一次出现的位置,以便在需要更新左边界时快速找到对应的位置。以下是一个示例代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
left = 0
max_len = 0
char_dict = {}
for right in range(len(s)):
if s[right] in char_dict and char_dict[s[right]] >= left:
left = char_dict[s[right]] + 1
char_dict[s[right]] = right
max_len = max(max_len, right - left + 1)
return max_len
这个代码使用了双指针的思想,left和right分别表示窗口的左右边界,char_dict是用来记录每个字符最后一次出现位置的哈希表。如果当前字符已经在窗口中出现过,就更新左边界,否则更新max_len。