算法:(五)字符串
(一)字符串题目的特点
①广泛性
- 字符串可以看作字符类型的数组,与数组的排序、查找、调整有关
- 很多其他类型的题可看作字符串类型的题
②需要掌握的概念
- 回文
- 子串(连续)
- 子序列(不连续)
- 前缀树(Trie树)
- 后缀树和后缀数组
- 匹配
- 字典序
③需要掌握的操作
- 与数组有关的操作:增删改查
- 字符的替换
- 字符串的旋转
(二)字符串题目的常见类型
①规则判断
- 判断字符串是否符合整数规则
- 判断字符串是否符合浮点数规则
- 判断字符串是否符合回文字符串规则
②数字运算
- int和long类型表达整数范围有限所以经常用字符串实现大整数,与大整数相关的加减乘除操作,需要模拟笔算的过程
③与数组操作有关的类型
- 数组有关的调整、排序等操作
- 快速排序的划分过程要掌握和改写
④字符计数
- 哈希表
- 固定长度的数组(C/C++256长度,JAVA65536长度)
- 滑动窗口问题、寻找无重复字符子串问题、计算变位词问题
⑤动态规划类型
- 最长公共子串
- 最长公共子序列
- 最长回文子串
- 最长回文子序列
⑥搜索类型
- 深度优先搜索
- 宽度优先搜索
⑦高级算法与数据结构解决的问题
- Manacher算法解决最长回文子串问题
- KMP算法解决字符串匹配问题
- 前缀树结构
- 后缀树和后缀数组