对于这道DP题,自己并没有找到合适的状态划分 ,于是在讨论区寻找题解
对于一个 i 到 j(i<j) 的字符串,它是回文串,当且仅当 i 与 j 处值相等并且 i+1 到 j-1 的子串也满足条件,于是,状态转移方程为
dp[i][j] = s[i] == s[j] && (j - i < 3 || dp[i + 1][j - 1]);
代码如下:
class Solution {
public:
int countSubstrings(string s) {
int dp[s.length()][s.length()];
int res = 0;
for (int i = s.length() - 1; i >= 0; i--) {
for (int j = i; j < s.length(); j++) {
dp[i][j] = s[i] == s[j] && (j - i < 3 || dp[i + 1][j - 1]);
if(dp[i][j]) ++res;
}
}
return res;
}
};