给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

提示:

1 <= S.length <= 20000
S 仅由小写英文字母组成。

思路:

充分理解题意后,我们可以发现,当字符串中同时有多组相邻重复项时,我们无论是先删除哪一个,都不会影响最终的结果。因此我们可以从左向右顺次处理该字符串。

而消除一对相邻重复项可能会导致新的相邻重复项出现,如从字符串 abba 中删除bb 会导致出现新的相邻重复项 aa 出现。因此我们需要保存当前还未被删除的字符。一种显而易见的数据结构:栈。

我们只需要遍历该字符串,如果当前字符和栈顶字符相同,我们就将其消去,否则就将其入栈即可。

class Solution {public String removeDuplicates(String S) {StringBuffer stack = new StringBuffer();int top = -1;for (int i = 0; i < S.length(); ++i) {char ch = S.charAt(i);if (top >= 0 && stack.charAt(top) == ch) {stack.deleteCharAt(top);--top;} else {stack.append(ch);++top;}}return stack.toString();}
}

leetcode1047. 删除字符串中的所有相邻重复项(栈的日常应用)相关推荐

  1. 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值

    day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...

  2. leetcode1047. 删除字符串中的所有相邻重复项

    一:题目 二:上码 方法一 class Solution {public:string removeDuplicates(string s) {if(s.size() == 0) return {}; ...

  3. 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...

  4. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  5. 1209. 删除字符串中的所有相邻重复项 II

    1209. 删除字符串中的所有相邻重复项 II 题目 我的解答 题目 给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连 ...

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

    删除字符串中的所有相邻重复项 题目 分析 我的解答 题目 删除字符串中的所有相邻重复项 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们. 在 S 上反复执行重复项 ...

  7. python 字符串删除重复_leetcode No.1047 删除字符串中的所有相邻重复项

    题目链接: 删除字符串中的所有相邻重复项 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们 ...

  8. Suzy找到实习了吗Day 11 |栈与队列中途 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    Day 11 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 注意栈不是一个数据结构,需要自己用list实现栈的逻辑 class Solu ...

  9. leetcode:前 K 个高频元素、删除字符串中的所有相邻重复项、有多少小于当前数字的数字、有效的山脉数组、独一无二的出现次数(JavaScript)

    文章目录 347. 前 K 个高频元素 思路 1047. 删除字符串中的所有相邻重复项 思路 1365. 有多少小于当前数字的数字 思路 优化 继续优化 完整代码 941. 有效的山脉数组 思路 12 ...

最新文章

  1. 报告老板,微服务高可用神器已祭出,您花巨资营销的高流量来了没?
  2. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Find/undo事件)
  3. java高位转低位注意事项,int转 short/byte溢出过程
  4. Yii 框架学习--01 框架入门
  5. android monitor不能查看/data目录
  6. elasticsearch 清理数据后硬盘不释放_电脑C盘正确的5种清理方法,你还不知道?学会后轻松释放20G空间...
  7. 关于C#中动态加载AppDomain的问题
  8. 【ArcGIS|空间分析|网络分析】9 使用位置分配选择最佳商店位置
  9. 应用代理 socket TCP协议 的资料
  10. java中堆和栈的区别_java中堆和栈的区别
  11. 内核的解压缩过程详解
  12. 图表控件MsChart使用demo
  13. 计算机类毕业论文中期检查,计算机类毕业论文中期检查表
  14. 驱动小黑的红点+中键TrackPoint
  15. 组态王串口服务器虚拟串口,串口服务器通过modbus TCP连接组态王实例
  16. 普及ERP不靠低价风暴(转)
  17. 蓝桥杯 A组 迷宫地图
  18. 《微积分》的本质笔记
  19. 计算机维修的入门知识
  20. j2ee开发的各种技术

热门文章

  1. 水深平均的二维浅水方程推导
  2. Oracle的Net Configuration Assistant 配置
  3. asterisk 支持 VP8 video编码 实现安卓的视频通话
  4. 关于mult-xip bin的一些资料整理
  5. python程序怎么修改_python文件如何修改
  6. 一步步编写操作系统 59 cpu的IO特权级1
  7. js有没有类似php的sleep函数,JavaScript-jQuery有没有类似sleep方法?
  8. c语言中如何用程序判断double型的浮点数能精确到几位小数,C语言中浮点数double/float相等判断...
  9. mac securecrt程序无响应_如何重置mac上的系统管理控制器smc教程
  10. JAVA 捕获异常所遇BUG