这道题直接用dp[i][j]保存i到j的Palindromic Substrings不好求递归式。
通过分析可以知道最多n+(n-1)+(n-2)+....+1,以nums[i]开头的最多n个,所以可以设dp[i][j]为i---j是不是
Palindromic Substrings,并记忆化搜索。
class Solution {
public:
int countSubstrings(string s) {
int len=s.size();
int sum=0;
vector<vector<int> > dp(len,vector<int>(len,0));
for(int i=0;i<len;i++)
{
dp[i][i]=1;
sum++;
}
for(int r=1;r<len;r++)//间距
{
for(int i=0;i+r<len;i++)
{
if(r==1)
{
if(s[i]==s[i+r])
{
dp[i][i+r]=1;
sum++;
}
}
else
{
if(s[i]==s[i+r])
{
dp[i][i+r]=dp[i+1][i+r-1];
if(dp[i][i+r])
{
sum++;
}
}
}
}
}
return sum;
}
};