【VISA 面试真实陪练复盘】最长不重复子串 | 紧张卡壳到顺利通过的真实瞬间

这次 VISA 的面试题就很典型——题不难,但现场极易慌。

🧠 面试题原文(英文原题全保留)

Given a string s, find the length of the longest substring without repeating characters.

Example 1:
Input: "abcabcbb" → Output: 3 (substring "abc")

Example 2:
Input: "bbbbb" → Output: 1

Example 3:
Input: "pwwkew" → Output: 3 (substring "wke")

Execution time limit: 4 seconds (py3)
Memory limit: 2G


🎯 实战陪练还原(真实过程描写)

候选人最初从暴力法开始分析,但卡在时间复杂度:

“如果两个循环扫,每一步都检查重复,O(n²) 会不会超?”

我们立刻引导到系统可行解法:滑动窗口(Two Pointers + Hash)。

👉 辅助重点不是告诉答案,而是:

  • 如何从暴力法推到最优解
  • 如何边写边 verbalize(当场表达思路)
  • 如何处理面试官的 follow-up 性能追问

我首先帮助他稳定节奏,不是直接说解法,而是提出 guiding questions:

“我们先从暴力解法开始思考好吗?时间复杂度是多少?”

他立即开始尝试双层循环,但面试官开始追问时间复杂度是否可接受,现场一度紧张。

于是我立即引导到 sliding window 的思路——同时提醒他:
“边想边说,让面试官听见你的推理过程。”

他开始口述:

我使用两个指针 left 和 right 做滑动窗口
用哈希表记录每个字符的位置
如果遇到重复字符,就把 left 移到重复字符后面
实时更新窗口最大长度

语气从慌乱变得越来越稳定,屏幕上的代码逐渐成形:

def longestsubstring(s: str) -> int:
    last = {}
    left = 0
    best = 0
    for right, ch in enumerate(s):
        if ch in last and last[ch] >= left:
            left = last[ch] + 1
        last[ch] = right
        best = max(best, right - left + 1)
    return best

Run 后输出正确: "pwwkew" -> 3
面试官点头:“Good, let’s move to the next one.”

➡️ 可以联系 CSOAHelp(我们提供高质量 OA/VO 面试辅助与全流程解析)。

Leave a Reply

Your email address will not be published. Required fields are marked *