📌  相关文章
📜  重复删除回文子字符串后删除字符串的最少步骤(1)

📅  最后修改于: 2023-12-03 15:12:29.087000             🧑  作者: Mango

重复删除回文子字符串后删除字符串的最少步骤

介绍

题目描述:给定一个字符串,每次可以删除它的一个回文子字符串,重复此操作直到字符串为空。求最少的删除次数。

这是一道很有趣的字符串题目,涉及到回文串的判断和删除。解题思路主要是贪心算法。

解题思路

从最小回文子串开始贪心,每次寻找最小回文子串并删掉它,直到字符串为空为止。

关键在于如何求最小回文子串。可以采用 Manacher 算法来求解。

具体思路参见代码实现。

代码实现
def minSteps(s: str) -> int:
    res = 0
    while s:
        # 求最小回文子串
        i = 0
        j = len(s) - 1
        while i < j:
            if s[i] == s[j]:
                i += 1
                j -= 1
            else:
                j -= 1

        if i == j:
            res += 1
            break
        else:
            # 删除最小回文子串
            res += 2
            s = s[:i] + s[j+1:]

    return res
时间复杂度

Manacher 算法的时间复杂度为 O(n)。因为要删除回文子串,所以最多需要操作 n 次,时间复杂度为 O(n^2)。

空间复杂度

Manacher 算法的空间复杂度为 O(n)。

参考资料

[1] Manacher 算法。https://www.cnblogs.com/grandyang/p/4475985.html。

[2] 删除回文子序列。https://blog.csdn.net/qaz334455/article/details/104066556。