当前位置:首页 > 编程笔记 > 正文
已解决

力扣1047删除字符串中的所有相邻重复项(java,栈解法)

来自网友在路上 160860提问 提问时间:2023-11-02 04:18:17阅读次数: 60

最佳答案 问答题库608位专家为你答疑解惑

Problem: 1047. 删除字符串中的所有相邻重复项

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

最直观的思路就是比较当前字的字符和相邻(也包含删除后再相邻)的上一字符是否相同,若相同则想办法去除两相同的字符,而关键就在如何较为便捷的比较同时去除当前和相邻(也包含删除后再相邻)的上一个一样的字符。由此我们可以想到使用栈这一数据结构。

具体的:

我们将字符串遍历,若栈为空或者当前栈顶元素与当前的字符不匹配则把当前字符加入到栈,否则出栈

解题方法

1.利用java双端队列模拟栈(便于将后续剩余的元素直接取出转换成字符串。如果直接利用栈还会多一步将字符逆序的操作!!!)
2.遍历字符串,用一个变量记录当前字符,栈为空或者当前栈顶元素与当前的字符 不匹配则把当前字符加入到栈,否则出栈(在双端队列中在对尾操作).
3.取出双端队列中剩余元素利用StringBuilder将其拼接并最终转换为字符串。

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O ( n ) O(n) O(n)

  • 空间复杂度:

添加空间复杂度, 示例: O ( n ) O(n) O(n)

Code


class Solution {//Time Complexity: O(N)//Space Complexity: O(N)public String removeDuplicates(String s) {//使用双端队列模拟栈Deque<Character> deque = new LinkedList<>();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);//如果栈顶元素和当前的字符不相同则入栈if (deque.isEmpty() || deque.peekLast() != c) {deque.addLast(c);} else {deque.pollLast();}}//将栈中剩余的元素取出来StringBuilder sb = new StringBuilder();while (!deque.isEmpty()) {sb.append(deque.pollFirst());}return sb.toString();}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"力扣1047删除字符串中的所有相邻重复项(java,栈解法)":http://eshow365.cn/6-29853-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!