Given a string s, a k duplicate removal consists of choosing k adjacent and equal letters from s and removing them causing the left and the right side of the deleted substring to concatenate together.
We repeatedly make k duplicate removals on s until we no longer can.
Return the final string after all such duplicate removals have been made.
It is guaranteed that the answer is unique.
Example 1:
Input: s = "abcd", k = 2 Output: "abcd" Explanation: There's nothing to delete.
Example 2:
Input: s = "deeedbbcccbdaa", k = 3 Output: "aa" Explanation: First delete "eee" and "ccc", get "ddbbbdaa" Then delete "bbb", get "dddaa" Finally delete "ddd", get "aa"
Example 3:
Input: s = "pbbcggttciiippooaais", k = 2 Output: "ps"
Constraints:
1 <= s.length <= 10^52 <= k <= 10^4sonly contains lower case English letters.
-------------------------
有小坑,注意是每次==k而不是>=k
class Solution:
def removeDuplicates(self, s: str, k: int) -> str:
sta = []
for ch in s:
if (sta and sta[-1][1] == k):
sta.pop()
if (sta and sta[-1][0] == ch):
sta[-1][1] += 1
else:
sta.append([ch,1])
if (sta and sta[-1][1] == k):
sta.pop()
res = ''
for ch,cnt in sta:
res += ch*cnt
return res

该博客讨论了一种字符串处理问题,即每次选择k个相邻且相等的字符进行删除,直到无法继续删除。给出了一种解决方案,通过维护一个记录字符及其出现次数的列表,逐步删除满足条件的字符,并返回最终结果。示例展示了不同输入和k值下的字符串变化过程,强调了算法的执行逻辑。
610

被折叠的 条评论
为什么被折叠?



