leetcode专题——回文串问题

回文串问题

根据回文特性进行分析

具体问题具体分析,往往思路就是从这里来的。回文问题主要是判断回文的时间复杂度太高,可以考虑DP、哈希表、字典树、字符串哈希、KMP、马拉车等优化对回文的判断。

336.回文对

leetcode专题——回文串问题

暴力解

有些问题可以先尝试,说不定能通过,但是形如O(n!)或者指数级复杂度就可以不考虑了。

DP

一般是子序列问题,迫不得已,没办法直接中心扩展。考虑类似LCS问题的区间DP思路

516.最长回文子序列

leetcode专题——回文串问题

中心扩展算法

从某个位置向两侧扩展,避免暴力法枚举所有的子串。

5.最长回文子串
leetcode专题——回文串问题

647.回文子串

leetcode专题——回文串问题

字符串哈希

一般用于解决字符串是否相等的情况,找子串也比较有用,相当于预先存储了字符串。

字符串哈希,将字符串看作base进制的数,其对应的10进制值就是其哈希值,因为哈希值很容易超出范围,所以需要模一个很大的质数,一般来讲还是不容易哈希冲突的。一般来说,我们选取一个大于字符集大小(即字符串中可能出现的字符种类的数目)的质数作为base,再选取一个在字符串长度平方级别左右的质数作为 mod,产生哈希碰撞的概率就会很低。

214.最短回文串

leetcode专题——回文串问题

马拉车

似乎很多问题都能用这个,但是我知难而退了。。。

KMP

214.最短回文串