0%

Leetcode 647 回文子串

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。

对于一个字符串的每个位置,都可以是一个回文串的中心点。因此我们可以遍历每一个位置,以这个位置为中心,向两边扩展,直到不是回文串为止。这样就可以求出以当前位置为中心的回文串的个数。

需要注意的就是,中心点可能是一个字符,也可能是两个字符。因此我们需要分别处理这两种情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def countSubstrings(self, s: str) -> int:
n, ans = len(s), 0
for i in range(n):
ans += self.check(i, i, s)
ans += self.check(i, i+1, s)
return ans

def check(self, left, right, s):
ans = 0
while left >= 0 and right <= len(s)-1 and s[left] == s[right]:
ans += 1
left -= 1
right += 1
return ans