字符串

官官方信息技术老师·7 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

字符串

数据结构与算法·面试高频 · 第 1 章 复杂度与线性结构

按 空格/→ 演示下一步

问一句
1 / 7 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

字符串

数据结构与算法·面试高频 · 第 1 章 复杂度与线性结构

1第 1 页 · 字符串

反转与遍历技巧

字符串不可变语言里先转数组再玩:双指针原地交换是基本功。

原地反转
左右指针交换着向中间走,O(1) 空间
按词反转
先整体反转再逐词反转,二次反转法
2第 2 页 · 反转与遍历技巧

回文系列(中心扩展/双指

回文有对称轴:奇偶两种中心往外扩,2n−1 个中心一次遍历找最长。

中心扩展
n 个字符中心加 n−1 个间隙中心,向外扩
双指针验证
首尾对撞比对,判回文 O(n)
Manacher
线性求最长回文,了解思路即可
3第 3 页 · 回文系列(中心扩展/双指

KMP 与字符串匹配

匹配失败不回头:next 数组记住「已匹配部分的最长相等前后缀」。

暴力匹配
失配全回退重比,最坏 O(nm)
next 数组
模式串每个前缀的最长相等前后缀长度
主串不回退
失配跳到 next 位置继续,整体 O(n+m)
4第 4 页 · KMP 与字符串匹配

异位词分组

异位词排序后同形:把排序结果当哈希 key,一扫分组。

排序作 key
同字母异序词排序后相同,O(nk log k)
计数作 key
26 位字母计数值作 key,免排序更快
窗口变体
找 s 中 p 的异位子串:定长窗口计数比对
5第 5 页 · 异位词分组

本节要点

  • ✓原地反转:左右指针交换走
  • ✓回文找中心,2n−1 个往外扩
  • ✓KMP:next 数组保主串不回头
  • ✓异位词:排序或计数作哈希 key
延伸主题:手写中心扩展最长回文实现一次 KMP 匹配
6第 6 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1中心扩展为什么是 2n−1 个中心?

参考答案奇长度回文的中心是字符本身,共 n 个;偶长度回文的中心在两字符之间,共 n−1 个。两类都要枚举,漏掉间隙中心会错过 abba 型回文。

2KMP 的 next 数组本质在记录什么?

参考答案记录模式串每个前缀的「最长相等前后缀」:失配说明已匹配部分内部有可复用的重叠结构,跳到 next 位置就是无回退地复用这段信息,主串指针永不后退。

3异位词分组用排序 key 与计数 key,各适合什么规模?

参考答案排序 key 简单直观,代价 O(k log k) 乘在词长上,词短量大时很合适;计数 key O(k) 更快但要规范化字母集,超大输入或含 Unicode 时需改造。

7第 7 页 · 课后思考