5.4 删除字符串中的所有相邻重复项(LC1047-E)

news2024/11/28 10:55:06

算法:

相对于20. 有效的括号 (opens new window)来说其实也是匹配问题,20. 有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。

本题也是用栈来解决的经典题目。

那么栈里应该放的是什么元素呢?

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?

比如“abbaca”

所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。如果栈里有相同的元素,就pop该元素。

从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。

实际操作:

可以直接用字符串模拟栈,这样就不用再转换了。不过python中字符串不可变,所以可以用列表模拟栈,最后再转成字符串。这样也就不需要反转了。

python可以使用列表(List)来实现栈的功能(没有直接的表示栈的代码)。列表的 `append()` 方法可以用于将元素入栈,`pop()` 方法可以用于将元素出栈。这样,我们可以使用列表的末尾作为栈的顶部。

调试过程:

class Solution:
    def removeDuplicates(self, s: str) -> str:
        stack = []
        for item in s:
            #若栈顶等于item,则要消除
            #栈顶用stack[-1]表示,写得时候就要想到,前提是stack非空
            if stack and stack[-1] == item:
                stack.pop()
            else:
                stack.append(item)
            #最后要返回一个字符串,可以用join函数
            return "".join(stack)

原因:`return` 语句的位置不正确。它应该放在 `for` 循环的外部,以便在遍历完整个字符串后返回最终的结果。

正确代码:

class Solution:
    def removeDuplicates(self, s: str) -> str:
        stack = []
        for item in s:
            #若栈顶等于item,则要消除
            #栈顶用stack[-1]表示,写得时候就要想到,前提是stack非空
            if stack and stack[-1] == item:
                stack.pop()
            else:
                stack.append(item)
            #最后要返回一个字符串,可以用join函数
        return "".join(stack)

时间空间复杂度:

  • 时间复杂度:O(n),其中 n 是输入字符串的长度。代码通过一次遍历字符串(for循环),对每个字符进行入栈和出栈操作,所以时间复杂度是线性的。

  • 空间复杂度:O(n),其中 n是输入字符串的长度。在最坏情况下,当输入字符串中的字符都不相同时,栈的大小将达到输入字符串的长度。因此,空间复杂度与输入字符串的长度成正比。

对于 `return "".join(stack)` 这行代码,复杂度的计算方式如下:

时间复杂度:O(n),其中 n 是最终生成的字符串的长度。`join()` 函数需要遍历栈中的字符并将它们逐个拼接起来,所以时间复杂度与最终生成的字符串的长度成正比。 

空间复杂度:O(n),其中n是最终生成的字符串的长度。在拼接字符串时,`join()` 函数会创建一个新的字符串对象,并将栈中的字符逐个复制到新的字符串中。因此,空间复杂度与最终生成的字符串的长度成正比。

需要注意的是,`join()` 函数的空间复杂度只考虑了最终生成的字符串所占用的额外空间,而不包括栈 `stack` 的空间。栈 `stack` 的空间复杂度已经在之前的回答中进行了说明,它是 O(n),其中 n是输入字符串的长度。 因此,总的空间复杂度可以看作是 O(n),其中 n是最终生成的字符串的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1175017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【从零开始学习Redis | 第五篇】基于布隆过滤器解决Redis的穿透问题

前言: 在如今的开发中,使用缓存中间件Redis已经成为一项很广泛的技术,Redis的高性能大大优化了我们的服务器性能,缓解了在高并发的情况下服务器的压力。它基于缓存的形式,在内存中保存数据,减少对磁盘的IO操…

什么是51单片机,,如何写代码,并且烧录?

文章目录 1.单片机介绍2.Keil 5操作1.打开Keil 5 3 新建工程3.添加文件并写代码4.添加到group5,设置6.check7.编译8.打开头文件9 调整编辑器 4.烧录1.烧录程序2.串口查询 5.Debug1.首先编译2.调试3.查询 6 51单片机汇编指令1.格式2.符号3.寻址4.数据传送与交换指令5.交换指令6 …

随笔04 Daily Practice

Dear Li Hua, It is the first time that I heve prepared to write a letter to you. Have you ever heard of my name? You dont? That is awful! You ungrateful guy, I have substitutively written countless letters for you in almost 20 years. Every tim…

AI视觉领域流媒体知识入门介绍(二):深入理解GOP

GOP(group of pictures) 在流行的视频编码算法中,都包含GOP这个概念,例如MPEG-2, H.264, and H.265。 背景 关于视频存储和传输的“size”: Resolution 分辨率 Uncompressed Bitrate 未压缩时的比特率 1280720 (720p…

chrome 一些详细信息查找的地方

可以获得chrome 信息的列表 缓存 #缓存位置# 浏览器事件

打印机:Open the front cover and pull out the drum unit

参考: https://support.brother.com/g/b/faqend.aspx?cgb&langen&prodmfcl8690cdw_eu_as&faqidfaq00000154_082#:~:textReplacing%20the%20drum%20unit%20Make%20sure%20the%20machine,unit%20out%20of%20the%20machine%20until%20it%20stops. 故障现…

【阿里云】通义千问X函数计算FC-爬取免费接口3个月附代码(参加活动可获得京东卡奖励)

目录 前言第一步:打开群内小程序链接报名报名方式一:报名方式二: 第二步:打开专属活动链接第三步:上传作品最后一步:去小程序提交完成记录爬取通义千问接口最后 前言 🧡本次活动可以获得京东卡9…

运动重定向:TeachNet

Vision-based Teleoperation of Shadow Dexterous Hand using End-to-End Deep Neural Network解析 摘要1. 简介2. Related Work2.1 基于视觉的无标记远程操作2.2 基于深度的3D手部姿势估计2.3 远程操作中的主从配对2.4 遥操作映射方法 3. 师生网络Joint angle lossConsistency…

STM32 GPIO 描述

一、GPIO功能描述 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR…

【计算机组成与设计】Chisel取指和指令译码设计

本次试验分为三个部分: 目录 设计译码电路 设计寄存器文件 实现一个32个字的指令存储器 设计译码电路 输入位32bit的一个机器字,按照课本MIPS 指令格式,完成add、sub、lw、sw指令译码,其他指令一律译码成nop指令。输入信号名…

腾讯云16核服务器配置有哪些?CPU型号处理器主频性能

腾讯云16核服务器配置大全,CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月,…

Redis之 redis.conf配置文件

文章目录 前言一、基本配置1.单位2.包含3.网络配置4.通用5.快照6.安全7.限制8.仅追加模式 二、总体主要介绍总结 前言 行家一出手,就知有没有,让一起学习redis.config配置文件。 一、基本配置 Redis 的配置文件位于 Redis 安装目录下,文件名…

【C++代码】接雨水,最近的更大的元素,柱状图中的最大矩阵,单调栈--代码随想录

题目:每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。…

凡人修仙之灵药篇

一、总纲 (1)药物均来自拼夕夕,我已经买过的,确认都是正版的,不过急需疗伤的还是线下就医吧, 快递一般都是三天到的。 (2)具有多种并发症建议去就医。 (3)两…

【公益案例展】 网易“双碳”智控系统——开源开放赋能绿色发展

‍ 网易天工公益案例 本项目案例由网易天工投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2023中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2020年9月中国明确提出2030年“碳达峰”与2060年“碳中和”…

【黑马程序员】SSM框架——MyBatisPlus

文章目录 前言一、MyBatisPlus 简介1. 入门案例1.1 创建新模块1.2 选择需要的技术集1.3 添加 mp 起步依赖1.4 设置 Jdbc 参数1.5 实体类与表结构1.6 定义数据接口1.7 测试功能 2. MyBatisPlus 概述3. MyBatisPlus 特性 二、标准数据层开发1. 标准数据层 CRUD 功能1.1 Lombok1.2…

Educational Codeforces Round 157 (Rated for Div. 2) D. XOR Construction (思维题)

题目 给定长为n-1(n<2e5)的整数序列a&#xff0c;第i个数a[i](0<a[i]<2n) 构造一个长为n的整数序列b&#xff0c;满足&#xff1a; 1. 0到n-1在b数组中每个数恰好出现一次 2. 对于&#xff0c; 题目保证一定有解&#xff0c;有多组时可以输出任意一组 思路来源 …

腾讯云CVM服务器操作系统镜像大全

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…

图及谱聚类商圈聚类中的应用

背景 在O2O业务场景中&#xff0c;有商圈的概念&#xff0c;商圈是业务运营的单元&#xff0c;有对应的商户BD负责人以及配送运力负责任。这些商圈通常是一定地理围栏构成的区域&#xff0c;区域内包括商户和用户&#xff0c;商圈和商圈之间就通常以道路、河流等围栏进行分隔。…

Java连接Redis并操作Redis中的常见数据类型

目录 一. Java连接Redis 1. 导入依赖 2. 建立连接 二. Java操作Redis的常见数据类型存储 1. Redis字符串(String) 2. Redis哈希(Hash) 3. Redis列表&#xff08;List&#xff09; 4. Redis集合&#xff08;Set&#xff09; 一. Java连接Redis 1. 导入依赖 pom依赖…