题目描述
题解
动态规划
这道题要区别与第5题, 第5题是求最长的回文子串, 这道题是求回文子串的数量
所以第5题的状态描述为dp[i][j]
表示字符串i...j
范围内最长的回文子串长度
这道题dp[i][j]
为布尔值, 表示子串i...j
是否为回文子串
动态转移方程为
1 | dp[j][i] = s.charAt(i) == s.charAt(j) && (i - j < 2 || dp[j + 1][i - 1]); |
每当新判断出一个回文子串, 就将结果值++
1 | public class lc647 { |
中心扩散
找到一个中心点, 然后从该点往两边扩散, 根据端的字符是否相同来判断是否为回文子串
1 | public int countSubstrings(String s) { |