题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个字符串,删除其中所有的 AB 和 CD(包括新产生的 AB 或 CD),返回最后的字符串长度。

思路分享

  • 首先,采用从左往右遍历字符串,什么时候删除 AB 或 CD?当然是遇到 B 或者 D 的时候有可能,这个时候检测最后一个字符即可。

  • 那有没有可能删除后,需要往前面找新出现的 AB 或 CD?不需要,如果前面出现的话,那么已经按照上面的逻辑处理掉了,新产生的 AB 或 CD 只会是正在遍历的这一位和栈的最后一位。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def minLength(self, s: str) -> int:
stk = list()
for c in s:
if len(stk) > 0:
if c == "D" and stk[-1] == "C":
stk.pop()
elif c == "B" and stk[-1] == "A":
stk.pop()
else:
stk.append(c)
else:
stk.append(c)

return len(stk)