返回
Python实战:移除字符串中相邻重复项
后端
2023-11-22 20:20:58
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 问题的解决方案。