Python - 至多包含两个字符的最大子串
题目
给定字符串 s,判断最长的只含有一个或者两个字符的子串的长度。
示例1
input_str = “kkkk”
answer = 4
解释:最长子串是 kkkk。
示例2
input_str = “abdyd”
answer = 3
解释:满足条件的最长子串是 dyd。
class Solution:
def get_max_length(self, input_str: str) -> int:
"""获取满足条件的最长子串"""
max_len = 1
left, right = 0, 0
table = {}
while right < len(input_str):
# 字典里保存遍历值的索引
table[input_str[right]] = right
right += 1
# 字典只保存两个元素。如果超出,说明包含子串已经违规,计算一次子串长度,开始新的子串计算。
if len(table) == 3:
# 删除最旧的元素,加入新元素,维持子串中的元素数为 2
del_idx = min(table.values())
left = del_idx + 1
del_key = self.get_key(table, del_idx)
table.pop(del_key)
max_len = max(max_len, right - left)
return max_len
def get_key(self, table, value):
"""通过值获取字典的键"""
for key in table.keys():
if table[key] == value:
return key