至多包含兩個不同字符的最長子串
至多包含兩個不同字元的最長子串問題可以使用滑動視窗算法來解決。
算法步驟如下:
- 初始化一個長度為 n 的視窗,將所有字元都設定為第一個字元。
- 不斷向右移動視窗,直到視窗內的字元數超過兩個不同字元為止。
- 在每次移動視窗時,將視窗內的所有字元都加入結果字元串中。
- 重複步驟 2 和 3,直到視窗完全遍歷字元串為止。
- 最後返回結果字元串即可。
例如,對於字元串 "abcabcbb",該算法可以找到 "ab" 和 "bcbc" 這兩個最長的子串,因為它們只包含兩個不同的字元。
以下是用 Python 實現的代碼:
def longest_substring_with_two_unique_chars(s):
n = len(s)
start = end = window = ""
for i in range(n):
if i > len(window):
start = end = i
window = s[i]
elif s[i] != window:
end = i
window = s[i]
if len(window) > len(result):
result = window
window = ""
else:
continue
return result
其中,result 是一個字元串,用於存儲最終的結果。算法的時間複雜度為 O(n),空間複雜度為 O(n)。