题目描述:
Given a string, your task is to count how many palindromic substrings in this string.
The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.
Example 1:
Input: "abc"
Output: 3
Explanation: Three palindromic strings: "a", "b", "c".
Example 2:
Input: "aaa"
Output: 6
Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa".
找出一个字符串的所有回文子字符串,起始下标不同就是不同的子字符串。用dp[i][j]表示从s[i]到s[j]是否为回文子字符串,那么可以得到递推关系,如果s[i]==s[j]&&(j-i<=2||dp[i+1][j-1]),那么dp[i][j]也为真。
class Solution {
public:
int countSubstrings(string s) {
int count=0;
int n=s.size();
vector<vector<int>> dp(n,vector<int>(n,0));
for(int i=n-1;i>=0;i--)
{
dp[i][i]=1;
count++;
for(int j=i+1;j<n;j++)
{
if(s[i]==s[j]&&(j-i<=2||dp[i+1][j-1]))
{
dp[i][j]=1;
count++;
}
}
}
return count;
}
};