本文根据个人学习过程,积累一些常用知识。供后续参考学习。
字符串的相关的算法,一直是面试和项目中经常用到的。因此,在这里整理记录。字符串可以看成是字符类型的数组,因此可以将其和数组排序、数组查找和顺序调整有关的算法相结合。另外,字符串的比较和子字符串的操作,可以用来解决其他问题,比如一棵树是否和另一棵树的子树相匹配。
字符串操作包含很多基本知识点,如:回文的概念、字符匹配的问题、字典序问题、子序列问题、子串问题、前缀树、后缀树和后缀数组的概念。
另外,动态规划的问题:最长公共子串、最长公共子序列、最长回文子串和最长回文子序列等。
KMP算法、前缀树、后缀树和后缀数组
字符串的相关的算法,一直是面试和项目中经常用到的。因此,在这里整理记录。字符串可以看成是字符类型的数组,因此可以将其和数组排序、数组查找和顺序调整有关的算法相结合。另外,字符串的比较和子字符串的操作,可以用来解决其他问题,比如一棵树是否和另一棵树的子树相匹配。
字符串操作包含很多基本知识点,如:回文的概念、字符匹配的问题、字典序问题、子序列问题、子串问题、前缀树、后缀树和后缀数组的概念。
另外,动态规划的问题:最长公共子串、最长公共子序列、最长回文子串和最长回文子序列等。
KMP算法、前缀树、后缀树和后缀数组
注:红色区域本文章 没有详细说明,后期会写博客。
一、字符串相关的题目目录
1*、A树的子树拓扑结构是否和B树拓扑结构相同
2、字符串A和B中,字符种类和每种字符出现的次数是否相同
3、字符串旋转词的问题
4*、句子逆序问题
5、字符串左右移位问题
6*、拼接最小字典序字符的问题
7、替换空格问题
8**、最长无重复字符子串问题
二、具体题目详述
1、A树的子树拓扑结构是否和B树拓扑结构相同
描述:对于两棵彼此独立的二叉树A和B,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。
分析:普通做法是遍历A中每棵子树判断是否和B树拓扑结构相同,这种方法时间复杂度为O(m*n)。另一种优秀地解决方法,是判断A的前序遍历字符串中是否包含B的前序遍历字符串。将树的问题转化为字符串的问题,用KMP算法将时间复杂度降到O(m+n)。
示例代码:
public boolean chkIdentical(TreeNode t1, TreeNode t2) {
String t1Str = serialByPre(t1); //序列化树的方法
String t2Str = seria