计算重复字符串的数量(移动窗口)
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
set_str = set()
length = len(s)
start_index = -1
max_length = 0
for i in range(length):
if i != 0:
set_str.remove(s[i-1])
while start_index + 1 < length and s[start_index + 1] not in set_str:
set_str.add(s[start_index + 1])
start_index += 1
max_length = max(start_index - i + 1, max_length)
print(set_str)
return
return max_length
# # 哈希集合,记录每个字符是否出现过
# occ = set()
# n = len(s)
# # 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
# rk, ans = -1, 0
# for i in range(n):
# if i != 0:
# # 左指针向右移动一格,移除一个字符
# occ.remove(s[i - 1])
# while rk + 1 < n and s[rk + 1] not in occ:
# # 不断地移动右指针
# occ.add(s[rk + 1])
# rk += 1
# # 第 i 到 rk 个字符是一个极长的无重复字符子串
# ans = max(ans, rk - i + 1)
# print(occ)
# return ans
s = Solution()
print(s.lengthOfLongestSubstring("sadfghjkss"))