当前位置: 首页 > article >正文

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

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();
    }
}

http://www.kler.cn/a/107936.html

相关文章:

  • 【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩
  • Jetpack 之 Ink API初探
  • MySQL与Oracle对比及区别
  • 使用Docker快速部署FastAPI Web应用
  • 随手记:简单实现纯前端文件导出(XLSX)
  • OpenGL【C++】台灯
  • 若依框架的使用+代码生成功能
  • Capacitor 打包 h5 到 Android 应用,uniapp https http net::ERR_CLEARTEXT_NOT_PERMITTED
  • PyCharm社区版安装
  • nodejs+vue全国公考岗位及报考人数分析
  • 读取Excel的工具类——ExcelKit
  • GLoRE:大型语言模型的逻辑推理能力探究
  • 薛定谔的猫重出江湖?法国初创公司AliceBob研发猫态量子比特
  • Redis(04)| 数据结构-压缩列表
  • 汽车托运放坑小攻略
  • STM32 CAN使用
  • 【QT】信号和槽能自动传递参数
  • J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署
  • c++ 小案例:判断质数猜数字用符号填补心形图案
  • ​Vue3响应式原理
  • git clone失败
  • 《HelloGitHub》第 91 期
  • Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(中)
  • FFmpeg5.1.3编译动态库踩坑之旅(基于Linux虚拟机)
  • Ps:对象选择工具
  • 【torch高级】一种新型的概率学语言pyro(01/2)