题目描述:
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例1:
输入:"abc"
输出:3
解释:三个回文子串:"a","b","c".
示例2:
输入:"aaa"
输出:6
说明:6个回文子串:"a","a","a","aa","aa","aaa"
注意:
- 输入的字符串长度不会超过1000。
class Solution(object):
def countSubstrings(self, s):
"""
:type s: str
:rtype: int
"""
#思路:以s的每一个位置为最中间和最中间的最左值向两边进行扩散,看其是否为回文串,若是则个数加一,若不是回文则跳出该层,遍历下一个位置
count = 0
for i in range(len(s)):
count = count + 1
#以该位置为中心向两边进行扩散
index_l = i - 1
index_r = i + 1
while index_l >= 0 and index_r < len(s):
if s[index_l] == s[index_r]:
count = count + 1
index_l = index_l - 1
index_r = index_r + 1
else:
break
#以该位置为中心的最左边向两边进行扩散
index_l = i
index_r = i + 1
while index_l >= 0 and index_r < len(s):
if s[index_l] == s[index_r]:
count = count + 1
index_l = index_l - 1
index_r = index_r + 1
else:
break
return count
菜鸟一枚,代码仅供参考,如有问题,望指正~