1.广泛性:
①字符串可以看做是字符类型的数组,通常需要用到数组的排序、查找、调整。
②很多其他类型的面试题看似与字符串无关却可以转换为字符串类型的面试题。
注意:在Java中实现字符串类型的题目时,需要掌握StringBuffer,StringBuider和toCharArray()方法,因为Java中String字符串是不可更改的,只会创建新的字符串(例如无法交换字符串中的两个字符的位置)
即在就java中处理字符串问题应该将它转换为StringBuffer、StringBuilder来进行处理,如果有需要再转化为char[]数组进行处理。
2.字符串相关的概念
①回文 abcba
②子串(连续的)abcde--abc
③子序列(不连续的)abcde--ace
④前缀树(Trie树)
⑤后缀树与后缀数组
⑥匹配 检验是否符合某个规则—可以转换为数值
⑦字典序 按照字典顺序排序
3.字符串相关的操作
①与数组有关的操作:增删改查
②字符的替换
③字符串的旋转
字符串题目的常见类型:
1.判断字符串是否符合某个规则
①判断字符串是否符合整数规则
②判断字符串是否符合浮点数规则
③判断字符串是否符合回文字符串规则
……
2.使用字符串进行数字运算
由于int和long类型表达的整数范围是有限的,所以经常使用字符串来实现大整数
大整数进行加减乘除需要使用字符串来模拟加减乘除的过程。
3.转化为数组进行操作的类型
①对数组进行调整、排序等操作
②使用快速排序和对快速排序进行改写
4.字符计数
给定一个字符串统计字符串中各个字符的数目
①使用hash表来解决
②使用固定长度的数组来代替hash表。C/C++中字符的ascii码范围是0~255;Java中字符范围是0~65535
③相关题目:滑动窗口问题、寻找无重复子串问题、计算变位词问题
5.动态规划问题
①最长公共子串
②最长公共子序列
③最长回文子串
④最长回文子序列
……
6.搜索类型
两个字符串String1,String2,要求将String1变换为String2,打印转换轨迹过程
①宽度优先搜索
②深度优先搜索
7.使用高级算法与输几局结构解决的问题
①使用Manacher(马拉车)算法解决最长回文子串问题
②使用KMP算法解决字符串匹配问题
③使用前缀树结构
④使用后缀树和后缀数组
⑤较难,在面试中很少出现