📅  最后修改于: 2023-12-03 15:10:46.324000             🧑  作者: Mango
回文字符串是指正反读都一样的字符串。给定一个字符串,编写一个函数来查找该字符串中的所有回文子字符串。
一种解决方案是:对于每个子字符串,都判断它是否是回文。这个方法的时间复杂度为 $O(n^3)$ ,即串长乘方。
更好的解决方案是:以每个字符为中心,向两边扩展,判断以该字符为中心的奇数回文子串和以该字符和下一个字符为中心的偶数回文子串。这个方法的时间复杂度为 $O(n^2)$ 。
def all_palindromic_substrings(s: str) -> List[str]:
"""
查找给定字符串的所有不同回文子字符串
:param s: 给定字符串
:return: 回文子字符串列表
"""
res = []
n = len(s)
for i in range(n):
# 以该字符为中心的奇数回文子串
l, r = i, i
while l >= 0 and r < n and s[l] == s[r]:
res.append(s[l:r + 1])
l -= 1
r += 1
# 以该字符和下一个字符为中心的偶数回文子串
l, r = i, i + 1
while l >= 0 and r < n and s[l] == s[r]:
res.append(s[l:r + 1])
l -= 1
r += 1
return res
>>> all_palindromic_substrings("babad")
['b', 'a', 'bab', 'aba', 'd']
>>> all_palindromic_substrings("cbbd")
['bb']
>>> all_palindromic_substrings("a")
['a']
>>> all_palindromic_substrings("ac")
['a', 'c']