📌  相关文章
📜  查找给定字符串的所有不同回文子字符串(1)

📅  最后修改于: 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']