该题解采用了滑动窗口的方法。首先定义一个哈希表来记录窗口内各字符的出现次数,以及一个变量来记录最大子字符串的长度。通过一个右指针遍历字符串,并在哈希表中更新该字符的出现次数。如果字符的出现次数超过2,即不满足题目要求,此时通过移动左指针减少该字符的计数,直到该字符的出现次数不超过2。在每次右指针移动后,更新最大长度。这样,当右指针遍历完整个字符串后,可以得到满足条件的最长子字符串的长度。
时间复杂度: O(n)
空间复杂度: O(1)
class Solution:
def maximumLengthSubstring(self, s: str) -> int:
char_count = {} # 哈希表记录字符出现次数
max_len = 0 # 最大子字符串长度
left = 0 # 左指针
for right in range(len(s)):
char_count[s[right]] = char_count.get(s[right], 0) + 1 # 更新字符出现次数
# 如果某个字符的出现次数超过2次,移动左指针直到该字符的出现次数恢复为2以下
while char_count[s[right]] > 2:
char_count[s[left]] -= 1
left += 1
# 更新最大子字符串长度
max_len = max(max_len, right - left + 1)
return max_len