📅  最后修改于: 2023-12-03 15:26:04.005000             🧑  作者: Mango
给定一个字符串,编写一个算法以确定它包含多少个“回文子字符串”。
输入: "abc"
输出: 3
解释:这个字符串中的 3 个回文子字符串分别是 "a", "b" 和 "c"。
输入: "aaa"
输出: 6
解释:这个字符串中的 6 个回文子字符串分别是 "a", "a", "a", "aa", "aa" 和 "aaa"。
我们可以使用中心扩展算法来解决这个问题。对于每个字符,我们向左右两个方向扩展,以找到所有可能的回文子字符串。由于回文子字符串可以是奇数或偶数,因此我们需要考虑两种情况。
def count_palindromic_substrings(s: str) -> int:
count = 0
for i in range(len(s)):
# 奇数长度的回文子字符串
l, r = i, i
while l >= 0 and r < len(s) and s[l] == s[r]:
count += 1
l -= 1
r += 1
# 偶数长度的回文子字符串
l, r = i, i + 1
while l >= 0 and r < len(s) and s[l] == s[r]:
count += 1
l -= 1
r += 1
return count