题目链接:https://leetcode-cn.com/problems/palindromic-substrings/
题意:
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
方法:动态规划,时间复杂度O(n^2),空间复杂度O(n^2)
class Solution {
public:
int countSubstrings(string s) {
int cnt = 0;//统计回文子串的数目
int size = s.size();//统计字符串长度
vector<vector<bool>> dp(size,vector<bool>(size,0));//动态规划数组,dp[i][j]表示i到j是否是一个回文串
for(int j=0;j<size;j++)//枚举
{
for(int i=0;i<=j;i++)
{
if(s[i]==s[j]&&(j-i<2||dp[i+1][j-1]))//如果两端字符相同,并且串的长度在2以内或者串本身是个回文串
{
dp[i][j] = true;//表示从i到j是个回文串
cnt++;//计数器自加
}
}
}
return cnt;//返回计数的数目
}
};