题目描述
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
求解思路
-
这道题目有两种解法:
-
①遍历找出所有子串,找出回文字符串并统计个数;
-
②遍历字符串的每一位元素,并作中心扩展找出他们的回文字符串个数并统计
-
-
很明显第一种方法复杂度较高,所有选择第二种;
-
由于会问字符串的中心有可能是一个点(a,c,a)这种,也有可能是两个点(c,b,a,c),所以需要考虑两种情况遍历就好;
-
将结果储存在res中,res 初始化为 字符串个数 n ,因为字符串的单独每个字符都可看做回文字符串。
输入输出示例
代码
class Solution {
public int countSubstrings(String s) {
int n = s.length();
char[] arr = s.toCharArray();
int res = n;
for(int i = 0; i < n; i++){
int left = i - 1, right = i + 1;
while(left >= 0 && right < n && arr[left--] == arr[right++]){//中心点只有一个
res++;
}
left = i;
right = i + 1;
while(left >= 0 && right < n && arr[left--] == arr[right++]){//中心点有两个
res++;
}
}
return res;
}
}