← 返回博客列表
Amazon

Amazon VO 面試題:最長無重複子串 + Follow-up 允許 k 次重複(滑動窗口)

2026-03-27

Amazon VO Interview

亞麻 VO 的程式碼不能直接執行,因此思路表達和 Dry Run 尤為關鍵。面試官在乎的是你的思維過程,而不只是最終程式碼。下面按面試實戰節奏完整複盤這道題。


題目:最長無重複字符子串

給定一個字符串 s,求其中沒有重複字符的子串的最大長度。

範例


開口前先講思路(亞麻面試關鍵)

亞麻程式碼不能 run,直接寫程式碼如果面試官不認可會直接涼涼。務必先口頭確認思路再動手。

核心思路:滑動窗口

  1. 維護左右兩個指針 leftright,表示當前窗口 [left, right]
  2. 每次向右移動 right,將 s[right] 加入窗口。
  3. 如果 s[right] 已存在於窗口中,持續右移 left,直到窗口內不含該字符。
  4. 更新答案 ans = max(ans, right - left + 1)
  5. 用哈希集合(Set)記錄窗口內的字符,O(1) 查詢。

為什麼滑動窗口有效?


程式碼

def lengthOfLongestSubstring(s: str) -> int:
    char_set = set()
    left = 0
    ans = 0

    for right in range(len(s)):
        while s[right] in char_set:
            char_set.remove(s[left])
            left += 1
        char_set.add(s[right])
        ans = max(ans, right - left + 1)

    return ans

Dry Run(手動跑樣例,亞麻面試必做)

s = "abcabcbb"

right s[right] char_set 操作 left 窗口 ans
0 a add 'a' 0 [a] 1
1 b add 'b' 0 [a,b] 2
2 c add 'c' 0 [a,b,c] 3
3 a remove 'a', left=1; add 'a' 1 [b,c,a] 3
4 b remove 'b', left=2; add 'b' 2 [c,a,b] 3
5 c remove 'c', left=3; add 'c' 3 [a,b,c] 3
6 b 收縮至 'b' 消失, left=5; add 'b' 5 [c,b] 3
7 b 收縮至 'b' 消失, left=7; add 'b' 7 [b] 3

最終答案:3


複雜度分析


Follow-up:每個字符最多允許出現 k 次

題目變體:將「無重複」改為「每個字符最多出現 k 次」,求滿足條件的最長子串。

思路調整

  1. 將 Set 換成 HashMap(字典),記錄每個字符在窗口內的出現次數。
  2. 每次移入 s[right],計數 +1。
  3. count[s[right]] > k,持續右移 left,對 s[left] 計數 -1(為 0 則刪除鍵),直到 count[s[right]] <= k
  4. 更新答案。

程式碼(k 次變體)

from collections import defaultdict

def longestSubstringKRepeats(s: str, k: int) -> int:
    count = defaultdict(int)
    left = 0
    ans = 0

    for right in range(len(s)):
        count[s[right]] += 1
        while count[s[right]] > k:
            count[s[left]] -= 1
            if count[s[left]] == 0:
                del count[s[left]]
            left += 1
        ans = max(ans, right - left + 1)

    return ans

k=1 時退化為原題(每字符最多 1 次 = 無重複)。

複雜度:同樣 O(n) 時間,O(min(m,n)) 空間。


面試實戰節奏總結

步驟 內容 亞麻注意點
1. 理解題意 複述題目,確認邊界(空串、全重複) 別假設,主動問
2. 講思路 口頭說清滑動窗口邏輯 先講再寫
3. 寫程式碼 參照思路逐步實現 變量命名清晰
4. Dry Run 手動跑一個樣例 亞麻程式碼不能執行,必須做
5. 複雜度 時間 O(n),空間 O(min(m,n)) 主動分析,不要等問
6. Follow-up k 次變體,改 Set → HashMap 展示延伸思考

需要 VO 輔助?

亞麻、Google、TikTok、微軟、Meta、Uber 等方向 VO 實時輔助持續進行中。

微信:Coding0201

#留學生找工作 #亞麻面試 #VO輔助 #滑動窗口 #算法面試 #北美求職


聯繫方式

Email: [email protected]
Telegram: @OAVOProxy