典型问题:寻找字符串中最长不重复子串
力扣
https://leetcode.cn/problems/longest-substring-without-repeating-characters/
题解
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
k, res, c_dict = -1, 0, {}
for i, c in enumerate(s):
if c in c_dict and c_dict[c] > k: # 字符c在字典中 且 上次出现的下标大于当前长度的起始下标
k = c_dict[c]
c_dict[c] = i
else:
c_dict[c] = i
res = max(res, i-k)
return res
指针i从左到右遍历整个字符串一次。
指针k记录当前i对应的左最长不重复子串的起始位置-1。k的起始值为-1。
当某次i移动而k不移动时,i - k即为本次i对应的最长不重复子串长度,将其记录。
最后返回记录的所有长度中最长的。