给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。
示例 1:
输入: s = "eceba", k = 2
输出: 3
解释: 则 T 为 "ece",所以长度为 3。
示例 2:
输入: s = "aa", k = 1
输出: 2
解释: 则 T 为 "aa",所以长度为 2。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-with-at-most-k-distinct-characters
解题思路:该题需要比较每一个符合要求的字符串的长度并返回最大长度,解题时我们要遍历字符串S,找到每一个符合要求的子串,AC代码如下:
class Solution:
def lengthOfLongestSubstringKDistinct(self, s: str, k: int) -> int:
if not k:
return 0
char_set = set()
temp = ""
ans = 0
for value in s:
if value in temp:
temp += value
else:
if len(char_set) < k:
temp += value
char_set.add(value)
else:
ans = max(ans, len(temp))
index = []
for i in char_set:
index.append((temp.rfind(i), i))
m_index, m_value = min(index)
temp = temp[m_index + 1:] + value
char_set.remove(m_value)
char_set.add(value)
return max(ans, len(temp))