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

题目来源

题目详情

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

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

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

示例:

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

提示:

题解分析

本题炸一看是一道字符串的模拟题,但是,当我们仔细观察这道题目的模拟细节的时候,我们可以发现使用模拟将不好移动指针,因为字符串是不能修改的,而且这道题目是删除相邻的重复项,当往前移动指针时,有可能到后面会出现新的重复创,导致指针需要后移。如果使用指针模拟的方法来做,将不得不考虑很多细节。

其实,我们可以换一个角度来思考问题,这里的删除重复项很像我们之前做过的括号匹配的问题,都是需要成对地匹配。所以,这里我们可以使用栈来保存字符,这样就可以不用思考太多之前的状态了,因为栈顶自动维护了’相邻’这个特性。

class Solution {
    public String removeDuplicates(String s) {
        int n = s.length();
        LinkedList sta = new LinkedList<>();
        for(char ch : s.toCharArray()){
            if(!sta.isEmpty() && sta.peek() == ch){
                sta.pop();
            }else{
                sta.push(ch);
            }
        }
        StringBuilder sb = new StringBuilder();
        while(!sta.isEmpty()){
            sb.append(sta.poll());
        }
        return sb.reverse().toString();
    }
}

Original: https://www.cnblogs.com/GarrettWale/p/16107349.html
Author: Garrett_Wale
Title: LeetCode-1047. 删除字符串中的所有相邻重复项

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583188/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 版本控制gitlab

    版本控制gitlab 版本控制gitlab 什么是版本控制gitlab gitlab部署 什么是版本控制gitlab GitLab 是一个用于仓库管理系统的开源项目,使用Git作为…

    Linux 2023年6月6日
    0112
  • PIM-DM 组播路由协议仿真

    目的 理解PIM-DM 的应用场景 掌握PIM-DM 的基本配置 理解PIM-DM 中剪枝和嫁接的原理 理解PIM-DM 中的Assert 机制 原理 Source-Specifi…

    Linux 2023年6月8日
    0106
  • 【XML】学习笔记第四章-schema

    Schema 概述 作用 与DTD相比Schema的优势 基础命名空间: 模式 引用方法 通过xsi:noNamespaceSchemaLocation引入 通过xsi:shema…

    Linux 2023年6月14日
    095
  • mysql查询中字符串转换成数字

    在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如’0’…

    Linux 2023年6月13日
    080
  • ELK 脚本自动化删除索引

    kibana有自带接口,可通过自带的API接口 通过传参来达到删除索引的目的。 删除15天前的索引 curl -XDELETE "http://10.228.81.161…

    Linux 2023年6月8日
    081
  • Linux之间的文件传输方式

    大数据集群往往涉及文件复制。我在研究大数据时总结了几种方法。 [En] Big data cluster often involves file copying. I summed…

    Linux 2023年5月27日
    0135
  • 三少玩Linux之ArchLinux 与win7 共存简单安装过程记录

    win7的安装过程就不说了, 还是先要安装win7或者别的windows操作系统; 再安装Archlinux系统, 这个是安装视频教程:https://www.bilibili.c…

    Linux 2023年6月14日
    0101
  • 015 Linux 标准输入输出、重定向、管道和后台启动进程命令

    1 三种标准输入输出 2 什么是重定向?如何重定向? (1)什么是重定向? (2)如何重定向? 3 管道符以及和它容易混淆的一些符号使用 (1)管道符 | (2)&和&am…

    Linux 2023年5月27日
    0117
  • 线段树扫描线(一) 矩形面积 以hdu 1542为例

    还是老规矩,传送门 hdu 1542 不做过多解释了,就是给出n个矩形,求出这些矩形所覆盖的面积和。由于n很小,因而这道题不是必须用线段树 先想想怎么办,先来一个例图(稍微有点复杂…

    Linux 2023年6月6日
    0114
  • 【MQTT】在Linux下sqlite3的使用

    安装sqlite3 #下载 wget https: #解压 tar -xzvf sqlite-autoconf-3310100.tar.gz sqlite3库函数 1. 打开/创建…

    Linux 2023年6月13日
    083
  • LAXCUS授权开源协议

    LAXCUS 授权许可证 第1版 本许可证仅针对LAXCUS分布式操作系统和衍生子版本,围绕LAXCUS分布式操作系统设计开发的硬件、硬件驱动程序、应用软件不受本许可证约束。 您对…

    Linux 2023年6月6日
    0125
  • 《拉钩课程 – 重学操作系统 – 计算机组成原理》

    1、芯片是怎么工作的呢?电能供给给芯片,芯片中的一种电子元件晶振(也就是石英晶体)通电后产生震荡,震荡会产生频率稳定的脉冲信号。通常这是一种高频的脉冲信号,每秒可达百万次。然后,我…

    Linux 2023年5月27日
    095
  • 一文带你全面了解什么是颠覆时代的Web3.0未来互联网

    前言 大家还记得前段时间Meta公司,也就是FaceBook改名后的那家,CEO扎克伯格发的那张元宇宙自拍吗? 他没想到的是,随手的一张自拍却引来了群嘲,20年前的像素感,粗糙的人…

    Linux 2023年6月7日
    0113
  • 版本控制gitlab

    版本控制gitlab 版本控制gitlab 版本控制介绍 常用的版本控制工具: gitlab部署 gitlab网页界面的基本使用 使用命令行的方式进行上传文件 版本控制介绍 版本控…

    Linux 2023年6月6日
    0128
  • Null和空值对于avg计算时产生的影响以及处理

    为什么要关注这一块呢:1.面试中可能会有涉及 2.工作中真的也可能会用,既然有可能我也用过,就拿出来跟大家分享一下,上一篇的博文,数据已准备好就不做数据准备的介绍了。 step1:…

    Linux 2023年6月14日
    086
  • c++的bind使用方法

    c++的bind使用方法 除了容器有适配器之外,其实函数也提供了适配器,适配器的特点就是将一个类型改装成为拥有子集功能的新的类型。其中函数的适配器典型的就是通过 std::bind…

    Linux 2023年6月14日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球