1、题目描述
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
2、算法分析
①首先搞清楚什么是回文字符串 ?
回文字符串就是类似:aa, aba , aabb , aacbb等;成中心对称。
②回文子串是个啥?
连续字符组成得序列。
单个字符是一个回文子串,对称得子字符串也是回文子串。
也看字符串中字符得个数,分为奇数和偶数。
比如对一个字符串 ababa,选择最中间的 a 作为中心点,往两边扩散,第一次扩散发现 left 指向的是 b,right 指向的也是 b,所以是回文串,继续扩散,同理 ababa 也是回文串。
这个是确定了一个中心点后的寻找的路径,然后我们只要寻找到所有的中心点,问题就解决了。
有奇数和偶数之分。
3、代码实现
import java.util.*;
// 相同的话
class Solution {
int count = 0;
public int countSubstrings(String s) {
if(s == null || s.length() == 0){
return 0;
}
for(int i = 0;i < s.length();i++){
// 奇数
center(s,i,i);
// 偶数
center(s,i,i+1);
}
return count;
}
// 中心扩展法,字符串的范围是 0 --- s.length() - 1
public void center(String s,int left,int right){
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)){
left--;
right++;
count++;
}
}
}