UNIT 01指针角色
#125 验证回文串
- 候选空间
- 首尾尚未比较的有效字符对。
- 安全移动
- 跳过非字母数字字符,再比较两端并同时向内移动。
- 循环不变量
- 区间外已经比较的有效字符对都相同。
- 边界检查
- 大小写归一;过滤后为空也满足回文。
迁移 · #680 验证回文串 II允许删除一个字符时,第一次冲突需要分别验证跳过左端或右端。
先说清契约,再独立实现进入本单元 ↗
双指针前置心智模型 · Unit 00
本单元只训练一个核心能力:每次移动指针时,你都必须能指出——哪些候选因此被排除,以及为什么这些候选全部不可能成为答案。
双指针与滑动窗口:用指针的移动与窗口的伸缩,组织有序的搜索过程。
这里的梯度描述认知任务的递进,不等同于题库的难度标签。点击题目可进入对应单元。
用同一组问题定位每个单元,再观察迁移题改变了哪个条件。进入写代码环节后,学习地图会收起,留出独立思考的空间。
如果答案尚未找到,那么至少一个答案仍位于蓝色未排除区域中。
只有当一整行或一整列都能被证明不可能时,对应端点才可以安全移动。
双指针算法的本质不是“从两边开始试数”,而是用两个边界描述尚未排除的候选空间。每次移动都必须伴随一批候选被证明不可能;正确性来自不变量,线性复杂度来自两个边界只沿一个方向移动。
6个元素产生15个候选数对。一般情况下需要检查约n(n-1)/2个格子。
这里只走了3个状态,每一步删除一整行或一整列。一般情况下left和right总移动次数不超过2n。
Unit 01 会把“候选区间与安全移动”迁移到字符串镜像比较:无效字符为什么可以跳过、有效字符相等后为什么可以同时收缩两端。