大家好呀,我是帅蛋。
今天来做字符串消消乐,当然不是那个消消乐,是它的弟中弟中弟版,只需要相邻是重复的消掉就好了。
话不多说,直接肝题!
LeetCode 1047:删除字符串中的所有相邻重复项
题意
小写字母组成字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
示例
输入:abbaca
输出:ca
提示
答案保证唯一
-
1 <= S.length <= 20000
-
S 仅由小写英文字母组成
题目解析
水题,难度简单。
匹配到相邻的两个元素是相同的就消除,你看有没有眼熟,像不像是括号匹配那道题。
呃,如果你不知道括号匹配那道题,看下面链接咧,我写过。
这种类型的题都算是匹配问题,只要是匹配问题,大家记住,在没有思路的时候,都可以考虑用栈碰一碰。
既然看透了这道题的本质,那做法也就呼之欲出了。
维护一个栈,从左到右依次扫描字符串,让当前字符和栈顶元素比较:
- 如果相同,证明当前两个元素相邻且相同或者由于之前删除了相同元素导致间接相邻且相同,此时栈顶元素出栈,当前字符不入栈。
- 如果不同,则当