题目
题解
中心扩散
选中一个中心点,然后向两边扩散,这是之前回文串题目中常见的思路,问题的关键是一共要多少个中心点?
答案是2n-1个,原因是对于奇数个字符的回文串,中心点为单个字符,即可能有n个中心点,而对于偶数个字符的回文串,中心点为两个字符,即可能有n-1个中心点。
假设n=4,则可能的情况如下:
归纳出
l
e
f
t
=
i
/
2
,
r
i
g
h
t
=
l
e
f
t
+
i
%
2
left=i/2,right=left+i\%2
left=i/2,right=left+i%2
class Solution {
public int countSubstrings(String s) {
int n=s.length(),res=0;
for(int i=0;i<2*n-1;i++){
int left=i/2,right=left+i%2;
while(left>=0&&right<n&&s.charAt(left)==s.charAt(right)){
res++;
left--;
right++;
}
}
return res;
}
}
时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)