回文子串 class Solution { public:int countSubstrings(string s) {int n=s.size();vector<vector<int>> dp(n,vector<int>(n,0));int res=0;for(int i=0;i<n;i++){for(int j=i;j>=0;j--){if(i==j){dp[i][j]=1;res++;}else{if(s[i]==s[j]){if(abs(i-j)<2){dp[i][j]=1;res++;}else{if(dp[i-1][j+1]){dp[i][j]=1;res++;}}}}}}return res;} }; 最长回文串子序列 class Solution { public:int longestPalindromeSubseq(string s) {int n=s.size();vector<vector<int>> dp(n,vector<int>(n,0));for(int i=n-1;i>=0;i--){for(int j=i;j<n;j++){if(s[i]==s[j]){if(j-i<2){if(j==i)dp[i][j]=1;else dp[i][j]=2;}else{dp[i][j]=2+dp[i+1][j-1];}}else{dp[i][j]=max(dp[i+1][j],dp[i][j-1]);}}}return dp[0][n-1];} };