1、回文子串
647. 回文子串 - 力扣(LeetCode)
class Solution
{//1、状态表示:// dp[i][j]:s字符串种从i位置到j位置的子串,是否是回文串//2、状态转移方程://if s[i] != s[j],false//如果s[i] == s[j]:(1)i == j,true;(2) i+1 == j相邻,true;(3)如果不是前面两种关系,那么就去看dp[i+1][j-1]//3、初始化:其实不用初始化,因为dp[i+1][j-1]不会越界//4、填表顺序:dp[i][j]需要dp[i+1][j-1],左下角。所以需要从下往上//5、找一找dp表中true的个数
public:int countSubstrings(string s) {int len = s.size();int res = 0;vector<vector<bool>> dp(len,vector<bool>(len));for(int i = len-1;i>=0;i--)for(int j = i;j<len;j++){if(s[i] == s[j])dp[i][j] = i + 1 < j ? dp[i+1][j-1] : true;if(dp[i][j] == true) res++;}return res;}
};
2、最长回文子串
5. 最长回文子串 - 力扣(LeetCode)
class Solution
{//dp[i][j]:存储从[i,j]位置的子串是不是回文串
public:string longestPalindrome(string s) {int len = s.size();vector<vector<bool>> dp(len,vector<bool>(len));