这次 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:1Example 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 面试辅助与全流程解析)。

