![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/edce5505f0f349a9abbbd16c6b81a639.png)
- 直接使用中心扩展法即可。
- 对于其它方法,LeetCode第5题都有涉及
- 对于不同的回文串,它的中心可能是1个字符,或者2个字符
- 例如abccba这样的字符串是回文串,以两个字符cc为中心
- abcccba这样的是以一个字符c为中心的回文串
- 所以我们可以从头到尾遍历字符串。然后每一次都考虑,两个字符为中心,和一个字符为中心,这两种情况来构建回文串。
- 确定中心后,只需要使用贪心的思想,不断扩展的比较两边。当前两边只要相等,那么整个字符串就是回文串。
- 例如abc
c
cba。我们先拿到了c - 然后向两边扩展比较,ab
c
cc
ba。我们发现两边相等。那么ccc就是一个回文串 - 再次向两边扩展a
b
cccb
a,两边再次相等,那么bcccb就是一个回文串 - 再次向两边扩展
a
bcccba
两边再次相等,那么abcccba就是一个回文串
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/81ce0ebc8a4863ba67d987e27a72a0c8.png)
class Solution {
public int countSubstrings(String s) {
int n = s.length(), ans = 0;
char c[] = s.toCharArray();
for(int i = 0; i < n;i++){
ans += expandAroundCenter(c,i,i);
ans += expandAroundCenter(c,i,i+1);
}
return ans;
}
private int expandAroundCenter(char[] c,int i, int j){
int count = 0;
while(i >= 0 && j < c.length && c[i]==c[j]){
i--;j++;
count++;
}
return count;
}
}