返回

Python实战:移除字符串中相邻重复项

后端

leetcode 1209. Remove All Adjacent Duplicates in String II(Python)

引言

LeetCode 1209:移除字符串中相邻重复项 II 要求我们编写一个 Python 函数,给定一个字符串 s,将其中的相邻重复项移除最多 k 次,其中 k 是给定的整数。这篇文章将展示如何使用栈解决这个难题,并提供一个清晰简洁的 Python 代码实现。

算法概述

我们的算法将利用栈的数据结构来存储字符串中的字符。当我们遍历字符串时,如果栈顶的字符与当前字符相同,且栈顶字符出现的次数小于 k,则将当前字符入栈。否则,我们将弹出栈顶字符,直到栈顶字符与当前字符不同,或者栈为空为止。

Python 代码

def removeDuplicates(s: str, k: int) -> str:
    stack = []

    for c in s:
        if stack and stack[-1][0] == c and stack[-1][1] < k:
            stack[-1][1] += 1
        else:
            stack.append([c, 1])

    result = ""
    for c, count in stack:
        result += c * count

    return result

代码解析

  • 我们使用了一个栈 stack 来存储字符和它们出现的次数。
  • 遍历字符串 s,对于每个字符 c
    • 如果栈顶的字符与 c 相同,且出现的次数少于 k,则递增它的次数。
    • 否则,弹出栈顶字符,直到栈顶字符与 c 不同或栈为空。
  • 最后,我们从栈中重建结果字符串 result,每个字符重复出现的次数等于其在栈中的次数。

示例

s = "abcd"
k = 2
print(removeDuplicates(s, k))  # 输出:"abcd"

s = "deeedbbcccbdaa"
k = 3
print(removeDuplicates(s, k))  # 输出:"aa"

结论

通过使用栈,我们可以有效地移除字符串中相邻的重复项,最多 k 次。我们的 Python 代码实现简洁明了,很好地展示了 LeetCode 1209 问题的解决方案。