回文子串数量问题是最长回文子串问题的扩展,题面为
给定一个长度为N的字符串 s ,返回这个字符串中所有回文子串的数目。
实例如下:
s = "abac"
答案是5个回文子串: "a","b","a","c","aba"
解题思路:
将最长回文子串的解法稍作修改就可以用于这个问题,我们使用相同的DP数组结构和计算过程,并使用一个变量来保存找到的回文子串数量。
Java代码如下:
class Solution {
public int countSubstrings(String s) {
char[] chars = s.toCharArray();
int N = chars.length;
if (N <= 1) {
return N;
}
int count = 0;
boolean[][] dp = new boolean[N + 1][N + 1];
for (int i = N; i >= 1; i --) {
dp[i][i] = true;
count ++;
for (int j = i + 1; j <= N; j ++) {
if ((chars[i - 1] == chars[j - 1])) {
if ( j - i <= 2 || dp[i + 1][j - 1]) {
dp[i][j] = true;
count ++;
}
}
}
}
return count;
}
}