子串和子序列时不同的
子串是连续的一段子字符串 subString
子序列是不连续的一段子字符串 subSequence
最长子序列 lc516
https://leetcode.com/problems/longest-palindromic-subsequence/
https://www.acwing.com/activity/content/code/update/1099437/
暴力超时
记忆化搜索
DP
最长回文子串
leetcode647
暴力求解,就是枚举每一个长度,双指针指起点和终点(其实就是枚举起点,终点根据长度可以得到),判断这个子串是不是回文串,如果是就和答案长度取最大值,但是这样会判断很多重复的子串(什么样是重复的,比如abcad)当你a与a一样,这时候需要判断,bc是不是回文串,但是当你枚举长度是2的时候,已经判断过bc不是回文串了,所以就做了重复的判断,记忆化搜索就是将之前遍历过的方案先记下来.
DP: 也是用区间DP的思想,枚举区间长度,然后枚举起点,根据区间长度算出终点,再算状态转移方程
状态转移方程: 如果l和r相等,f[i][j] = true, 如果length == 2, i和j一样,f[i][j] = true, 如果len > 2,那么如果i,j相等,然后f[i + 1][j - 1] == true, 那么f[i][j] = true
中心枚举法:https://www.acwing.com/activity/content/code/content/1095377/
3.字符串哈希 :https://www.acwing.com/video/55/
leetcode 5
最长公共子串
DP做法和上面题一致,两维空间去记录i到j是不是回文子串,如果是就记录长度,并与最大长度比较
做法二:枚举中心法,全局变量记录最长的回文子串的起点和长度,枚举中心点,分别以奇数和偶数去求