删除字符串中的所有相邻重复项
力扣 1047. 删除字符串中的所有相邻重复项
题目说明
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
1 <= S.length <= 20000S仅由小写英文字母组成。
示例
例1
1 | 输入:"abbaca" |
笔者理解
此题是一道字符串算法问题,在力扣题库中被定义为简单题。
解法
当笔者阅读完此题后,发现此题很适合用栈,然后将字符串各个字母存进栈中,相同的就弹出来,输出最后留在栈中的字母即可,但后来发现这样的时间和空间效率都不高,在评论里发现一种巧妙的方法,用一个标记tick来标记当前的栈(非真实定义的栈)内元素有几个,然后通过i的移动来判断当前元素是否应该入栈,应该入栈就将元素置换到前面去,最后再将前tick+1个元素转化为字符串输出即可,让我们来看看具体如何实现的吧。
实现
1 | public String removeDuplicates(String S) { |
时间和空间效率都不错,可见此解法还比较适合此题;
总结
本题是今天的每日一题,难度是简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徐年の博客!









