- 题解
class Solution { public int countSubstrings(String s) { int res = 0; int n = s.length(); boolean flag [][] = new boolean[n][n]; for(int i = 0 ; i < n ; i++){ flag[i][i] = true; res ++; } for(int i = 0 ; i < n -1 ; i++){ if(s.charAt(i)==s.charAt(i+1)){ res++; flag[i][i+1] = true; } } for(int len = 3 ; len <= n;len++){ for(int i = 0; i+len <= n ;i++){ if(s.charAt(i)==s.charAt(i+len-1)){ flag[i][i+len-1] = flag[i+1][i+len-1-1]; if( flag[i][i+len-1]==true) res++; } } } return res; } }
- 从中心往两侧延伸【通过】
在长度为 N 的字符串中,可能的回文串中心位置有 2N-1 个:字母,或两个字母中间。 从每一个回文串中心开始统计回文串数量。回文区间 [a, b] 表示 S[a], S[a+1], ..., S[b] 是回文串,根据回文串定义可知 [a+1, b-1] 也是回文区间。
反思
之前回文子串没有想其他解答,导致思维局限于暴力 现在看了几种解答 可以利用中心扩散来求解 也就是在2*n-1的位置进行遍历
解答二是动态规划 从1个长度到n个长度进行查找 头相等找中间 而中间是利用之前的统计结果来求解 也形成更好的动态规划模型