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)

大家都在看

  • CSS解决父级边框坍塌的问题

    首先在父级标签内添加如下 标签 然后在CSS中对该标签进行如下修饰: #clear{ clear:both; margin:0px; padding: 0px; } 优点:简单。缺…

    Linux 2023年6月13日
    095
  • 初识MySQL数据库

    一 、引言 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住双十一期间全国的购票需求,你怎么写? 由于在同一时段抢票的人数太多,所以你的程序不可…

    Linux 2023年6月14日
    0119
  • ASP.NET CORE在docker中的健康检查(healthcheck)

    在使用docker-compose的过程中,很多程序都提供了健康检查(healthcheck)的方法,通过健康检查,应用程序能够在确保其依赖的程序都已经启动的前提下启动,减少各种错…

    Linux 2023年6月6日
    0107
  • Linux常用命令

    Linux常用命令 在学习瑞吉外卖项目课程中自己做的一个linux常用命令的小笔记便于以后复习使用,仅供参考。 文件目录操作命令 pwd:显示该目录或者文件的路径 ls命令 ls:…

    Linux 2023年6月7日
    076
  • 删除数据库表中重复数据的方法

    一直使用Postgresql数据库,有一张表是这样的: DROP TABLE IF EXISTS "public"."devicedata"…

    Linux 2023年6月6日
    090
  • CA证书介绍与格式转换

    PKCS 公钥加密标准(Public Key Cryptography Standards, PKCS),此一标准的设计与发布皆由RSA资讯安全公司(英语:RSA Security…

    Linux 2023年6月6日
    082
  • 2018部分

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    080
  • Linux 下重启 PHP 服务、nginx 服务

    一、重启 PHP 服务 service php-fpm start 开启 service php-fpm stop 停止 service php-fpm restart 重启 二、…

    Linux 2023年6月13日
    078
  • Quartus II 13.0 sp1的官方下载页面

    今天为了下个ModelSim跑到网上去找下载资源,清一色的百度网盘,下载速度60k/s,简直有病,于是跑到Intel官网上把连接挖出来了,供各位直接下载 实测使用IDM多线程下载速…

    Linux 2023年6月13日
    0169
  • Redis分布式锁的N种姿势

    Redis几种架构 Redis发展到现在,几种常见的部署架构有: 单机模式; 主从模式; 哨兵模式; 集群模式; 我们首先基于这些架构讲解Redisson普通分布式锁实现,需要注意…

    Linux 2023年5月28日
    0101
  • Workshop与会议形式的分类

    在计算机科研工作阅读的过程中,我们经常遇到workshop和conference等关键词,通过这些关键词我们可以一定程度上了解文章的水平,从而方便自己的学习,下面记录了一些我从网络…

    Linux 2023年6月14日
    0172
  • 音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

    做直播推流的前提是要有直播服务器接收直播流,所以需要我们自己建设一个流媒体服务器。 流媒体服务器SRS SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/H…

    Linux 2023年6月7日
    0104
  • ASP.NET Core 发布到Linux需要注意的地方

    ☆☆☆ 共同学习,欢迎拍砖;转载请注明出处,谢谢。欢迎关注我的公众号:闲聊编程。☆☆☆ Original: https://www.cnblogs.com/FlyLolo/p/11…

    Linux 2023年6月7日
    082
  • Visual studio prebuild/postbuild 设置条件不生效

    这两天有一个需求就是,在编译完成后,对生成的dll进行混淆加密处理,并且自动上传到nuget。混淆加密和自动上传已经写成了cmd命令,但是又不想在Debug模式下调用这个命令,毕竟…

    Linux 2023年6月13日
    080
  • redis好书推荐

    redis好书推荐原创amy_xing01 最后发布于2018-07-16 18:29:54 阅读数 10427 收藏展开Redis从入门到深入学习,推荐几本好书: 《Redis入…

    Linux 2023年5月28日
    089
  • python入门基础知识四(字典与集合)

    dict_name = {key1:value1,key2,value2,…} 空字典:dict_name = {} or dict_name = dict() 字典的…

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