题目描述:
题解:中心拓展
思路:对每个可能的回文中心分别向两侧进行拓展,判断当前对应的子字符串是否回文。回文中心分为奇数和偶数两种情况。
以s=abba,s长度为4为例,可能的回文中心有:a ab b bb b ba a7种,回文中心起始和终止位置如下:
第i组回文中心的左右边界分别为:l = i//2 j = l+i%2
然后分别判断s[l]与s[j]是否相同,相同则说明找到一个回文字串,然后l r分别向左和向右移动,知道超出范围或两个位置的字符不相等。
class Solution: def countSubstrings(self, s: str) -> int: count = 0 n = len(s) for i in range(2*n-1): l = i//2 r = l+i%2 while l>=0 and r<n and s[l]==s[r]: l = l-1 r = r+1 count = count+1 return count