大家好呀,我是帅蛋。
今天来做字符串消消乐,当然不是那个消消乐,是它的弟中弟中弟版,只需要相邻是重复的消掉就好了。
话不多说,直接肝题!

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

本文通过图解和代码实现详细讲解了LeetCode 1047题,即如何删除字符串中的所有相邻重复项。使用栈作为主要数据结构,遍历字符串,遇到相邻相同字符则删除,最终得出唯一解。文章介绍了Python和Java两种语言的解决方案,并强调此题属于匹配问题,可以考虑用栈解决。
最低0.47元/天 解锁文章
3548

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



