1,求字符串中,回文子串的个数
647. 回文子串 :给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。求回文子串的个数
输入:"aaa" 输出:6 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
Dp[i][j]表示[i,j]是否为回文字串
如果s[i]不等于s[j],则一定不是回文字串 dp[i][j]=false
如果s[i]等于s[j]:
1,aa ;j-i=0 aba: j-i=1 都是回文字串
2,aaabaaa :j-i>1的时候需要考虑,[i+1,j-1]是回文,dp[i][j]才是true
遍历顺序:j从0开始,i也是从0开始
2,求不连续的回文子串的长度
516,最长回文子序列:给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。
求不连续的回文子串的长度
示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。
dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。
如果s[i]==s[j] 则长度加2 dp[i][j]=dp[i+1][j-1]+2
不相等(取s[i]或s[j]):dp[i][j]=max(dp[i+1][j],dp[i][j-1])
遍历顺序为:i从i2到i0 ,j从(i+1)到len-1