给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: “abc”
输出: 3
解释: 三个回文子串: “a”, “b”, “c”.
解题思路
数组含义:dp[i][j]代表字符串s[i…j]是否回文
状态转移:当s[i]==s[j]时,如果当前字符串长度是1或者2,则满足回文条件,或者处于i和j之间的字符串是回文字符串,同样满足条件
代码
class Solution {
public int countSubstrings(String s) {
int n=s.length(),res=0;
boolean[][] dp=new boolean[n][n];
for(int i=0;i<n;i++)
for(int j=i;j>=0;j--)
if(s.charAt(i)==s.charAt(j)&&(i-j<2||dp[i-1][j+1]))
{
dp[i][j]=true;
res++;
}
return res;
}
}