647. 回文子串
动态规划解决的经典题目,如果没接触过的话,别硬想 直接看题解。
代码随想录
class Solution {
public:int countSubstrings(string s) {vector<vector<bool>>dp(s.size(),vector<bool>(s.size(),false));int res=0;for (int i=s.size()-1;i>=0;i--){for (int j=i;j<s.size();j++){if (s[i]==s[j]){if (j-i<=1){dp[i][j]=true;res++;}else if (dp[i+1][j-1]){dp[i][j]=true;res++;}}}}return res;}
};
516.最长回文子序列
647. 回文子串,求的是回文子串,而本题要求的是回文子序列, 大家要搞清楚两者之间的区别。
代码随想录
class Solution {
public:int longestPalindromeSubseq(string s) {vector<vector<int>>dp(s.size(),vector<int>(s.size(),0));for (int i=s.size()-1;i>=0;i--){for (int j=i;j<s.size();j++){if (s[i]==s[j]){if (j-i<=1)dp[i][j]=j-i+1;else dp[i][j]=dp[i+1][j-1]+2;}else {//其实不需要dp[i+1][j]dp[i][j]=max({dp[i+1][j-1],dp[i][j-1],dp[i+1][j]});}}}return dp[0][s.size()-1];}
};
总结
dp还是要有一点基础再去做其他的题会更好一些,有些题思路确实不好想。