1. 解题思路
这一题思路上就是一个堆栈的思路,我们只需要将所有的括号进行聚合,然后统一进行进栈以及消除操作即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def removeSubstring(self, s: str, k: int) -> str:
stack = []
prev, cnt = "(", 0
def push(stack, ch, cnt):
if len(stack) == 0:
stack.append([ch, cnt])
elif ch == stack[-1][0]:
stack[-1] = [ch, stack[-1][1] + cnt]
elif ch == "(":
stack.append([ch, cnt])
else:
while stack and cnt >= k and stack[-1][1] >= k:
stack[-1][1] -= k
cnt -= k
if stack[-1][-1] == 0:
stack.pop()
if stack and stack[-1][0] == ch:
cnt += stack.pop()[1]
if cnt > 0:
if len(stack) == 0 or stack[-1][0] != ch:
stack.append([ch, cnt])
else:
stack[-1] = [ch, stack[-1][1] + cnt]
return
for ch in s:
if ch == prev:
cnt += 1
continue
if cnt != 0:
push(stack, prev, cnt)
prev, cnt = ch, 1
push(stack, ch, cnt)
ans = ""
for ch, cnt in stack:
ans += ch * cnt
return ans
提交代码评测得到:耗时255ms,占用内存22.75MB。
1948

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



