至多包含k個不同字符的最長子串
"至多包含k個不同字元的最長子串"是一個經典的計算機科學問題,通常使用滑動視窗算法來解決。下面是一個使用Python實現的簡單解決方案:
def length_of_longest_substring(s: str, k: int) -> int:
"""
返回字元串s中至多包含k個不同字元的最長子串的長度。
"""
# 初始化視窗大小為1
start = 1
# 用於存儲當前視窗中不同字元的數量
window_counts = {s[start]: 1}
max_length = 1 # 最長子串的初始長度為1
# 當視窗未到達字元串末尾時繼續疊代
while start < len(s):
# 更新視窗中不同字元的數量
new_counts = window_counts.copy()
for char in window_counts:
if s[start] == char:
window_counts[char] += 1
else:
window_counts[char] = 1
# 如果視窗中的不同字元數量不超過k,則增加視窗大小並更新最長子串長度
if len(window_counts) <= k:
max_length += 1
start += 1
else: # 如果視窗中的不同字元數量超過k,則收縮視窗大小並重新計算最長子串長度
window_counts[s[start - k + 1]] -= 1
if window_counts[s[start - k]] == 0: # 如果視窗中的某個字元不再出現,則收縮視窗大小並更新視窗計數
del window_counts[s[start - k]]
start -= 1
return max_length
這個算法的時間複雜度是O(n),其中n是字元串的長度。它通過疊代地移動視窗並維護一個視窗計數字典來解決問題。如果視窗中的不同字元數量超過k,它會收縮視窗並重新計算最長子串長度。最後,返回的結果是最長子串的長度。