回文子字符串的个数

给定一个字符串 s ,请计算这个字符串中有多少个回文子字符串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

输入:s = "abc"
输出:3
解释:三个回文子串: "a", "b", "c"
输入:s = "aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

提示:
1 <= s.length <= 1000
s 由小写英文字母组成

(有时候想不清好像写个例子就比较明白了)
比如'aaa' 回文子串个数为3(2+1);‘aaaa’ 回文子串个数为6 (3+2+1);‘aaaaa’回文子串个数10(4+3+2+1).发现一定长度的子串等于从1加到其长度减1累计之和。

解题思路:
1.单个元素算一个子串 故len(s)-1是基础的;
2.找出字符串连续相同的元素长度,根据刚刚的例子,可以计算长度相同部分的子串个数
3.考虑对称情况的子串,比如‘aba’这种,出现一次加一次
4.将三种情况汇总

具体代码:

class Solution:
    def countSubstrings(self, s: str) -> int:
        s_list=list(s)
        output = len(s_list)
        #定义接收连续相同元素的长度
        res = 0
        for i in range(len(s_list)-1):
            left = i
            right = i
            # 计算连续相同元素的子串的个数
            while right <= len(s)-2 and s[i] == s[right+1]:
                right +=1
            # 比如‘asffffed’ res=0,0,3,2,1,0,0,output将res接收
            res = right -i
            output += res
            # 找出对称型的子串并计数
            while left >=1 and right <= len(s) -2 and s[left-1] == s[right+1]:
                left -= 1
                right += 1
                output +=1
        return output

你可能感兴趣的:(回文子字符串的个数)