这是什么

LeetCode 第 438 题「找到字符串中所有字母异位词」是高频面试题:在字符串 s 中找出所有与 p 互为异位词(字符种类和数量一致、排列不同的字符串)的子串起始位置。解法从暴力枚举的 O((n-m)·m·log m) 演进到滑动窗口(双指针维持一个固定大小的子串范围)+ 26 位频次数组 O(n·26),再到引入 diff 计数器(差异计数器,记录当前窗口与目标频次还有多少种字符没对上),让每次匹配判断从扫 26 位降为 O(1)。

真正暴露功力差距的不是技巧,而是 if 与 while 的选择:固定长度窗口用 if(每轮只超长 1,收缩一次必恢复),可变长度窗口用 while(违规字符离左端多远未知,必须持续收缩)。这是滑动窗口类题目的通用判断准则,不是这道题的特例。

行业怎么看

这道题的解法演进,是当下技术圈最经典的争论之一。

正方认为,diff 这层优化体现的是「能否把一个朴素解法继续往死里抠」的工程本能。一位大厂面试官在相关讨论中提到,200 多个候选人里能在白板把这层讲清楚的不超过 10 个 — 这恰恰是 AI 时代最稀缺的能力,因为 AI 能写代码,但需要人能判断它写得对不对、好不好。

反方同样尖锐:现实工程几乎没人手写滑动窗口,更不会去抠 O(n·26) 到 O(n) 的常数优化。某 AI 创业公司负责人公开质疑算法面试的筛选效度 — 能默写红黑树不代表能交付功能,把训练精力花在 LeetCode 上是一种「内卷惯性」。

我们的判断:争论本身被高估了。AI 降低的是编码门槛,抬高的是 review 门槛。能讲清楚「为什么这么写」的人,永远是协作链上的关键节点。

对普通人的影响

对企业 IT:代码产出量不再是核心 KPI,code review 和架构判断的权重在上升。团队的人才画像需要从「写得多快」转向「看得多准」。

对个人职场:与 AI 结对编程时,能否精准描述问题、设计正确数据结构、识别边界条件,比记住某个 API 更值钱。算法的「概念理解」正在替代「实现记忆」成为分水岭。

对消费市场:直接影响有限,但 AI 编程工具普及后,技术培训市场可能分化 — 「教写代码」的课程降温,「教看懂代码」的课程反而有空间。