双指针实现删除字符串中的所有相邻重复项

class Solution:def removeDuplicates(self, s: str) -> str:res = list(s)slow = fast = 0length = len(res)while fast < length:# 如果一样直接换,不一样会把后面的填在slow的位置res[slow] = res[fast]# 如果发现和前一个一样,就退一格指针if slow > 0 and res[slow] == res[slow - 1]:slow -= 1else:slow += 1fast += 1return ''.join(res[0: slow])
这段代码实现了一个去除字符串中相邻重复字符的功能,具体方法是使用双指针来模拟栈的操作。以下是逐步解释:
-
类定义:定义了一个名为
Solution的类,其中包含一个名为removeDuplicates的方法。 -
方法参数:
removeDuplicates方法接受一个字符串s作为输入,返回去除相邻重复字符后的字符串。 -
初始化:
- 将字符串
s转换为列表res(因为字符串是不可变的)。 - 定义两个指针
slow和fast,均初始化为 0。slow指针用于将结果写入新位置,fast用于遍历原字符串。 - 计算字符串的长度
length。
- 将字符串
-
主循环:
while fast < length::- 将
res[fast]的值复制到res[slow],这一步相当于将字符放到结果的位置。
- 将
-
判断条件:
if slow > 0 and res[slow] == res[slow - 1]::如果slow大于 0 且当前字符与前一个字符相同,说明找到了相邻重复字符。此时将slow指针向后退一位。
-
指针移动:
- 如果没有发现相邻重复,
slow加 1,表示成功放入一个新的字符。 fast每次循环都加 1,以继续遍历字符串。
- 如果没有发现相邻重复,
-
返回结果:
return ''.join(res[0: slow]):最后,将res列表从 0 到slow的部分合并成一个字符串并返回,得到去除相邻重复字符后的结果。
总体来说,这个方法通过双指针的方式,有效地处理了字符串中的相邻重复字符,具有较好的性能。
我们来详细分析一下输入为 abbaca 时代码的执行流程。
-
初始化:
- 输入字符串:
s = "abbaca"。 - 转换为列表:
res = ['a', 'b', 'b', 'a', 'c', 'a']。 - 初始化指针:
slow = 0,fast = 0。 - 字符串长度:
length = 6。
- 输入字符串:
-
开始循环:
-
第一次迭代 (
fast = 0):res[slow] = res[fast],res[0]=res[0](a),无变化。slow= 1,fast加 1(fast = 1)。
-
第二次迭代 (
fast = 1):res[slow] = res[fast],res[1]=res[1](b),无变化。slow= 2,fast加 1(fast = 2)。
-
第三次迭代 (
fast = 2):res[slow] = res[fast],res[2]=res[2](b),无变化。- 检查相邻:
res[2] == res[1](b == b),相同,slow向后退,slow = 1。 fast加 1(fast = 3)。
-
第四次迭代 (
fast = 3):res[slow] = res[fast],res[1]=res[3](a),变为['a', 'a', 'b', 'a', 'c', 'a']。- 检查相邻:
res[1] == res[0](a == a),相同,slow向后退,slow = 0。 fast加 1(fast = 4)。
-
第五次迭代 (
fast = 4):res[slow] = res[fast],res[0]=res[4](c),变为['c', 'a', 'b', 'a', 'c', 'a']。- 检查相邻:没有相邻重复,
slow加 1,slow = 1。 fast加 1(fast = 5)。
-
第六次迭代 (
fast = 5):res[slow] = res[fast],res[1]=res[5](a),变为['c', 'a', 'b', 'a', 'c', 'a']。- 检查相邻:
res[1] == res[0](a != c),不同,slow加 1,slow = 2。 fast加 1(fast = 6)。
-
-
结束循环:
fast达到length,循环结束。
-
返回结果:
- 最后,返回
''.join(res[0:slow]),也就是res的前 2 个元素['c', 'a'],结果为"ca"。
- 最后,返回
最终的返回结果是 "ca",成功去除了输入字符串 abbaca 中的相邻重复字符。
相关文章:
双指针实现删除字符串中的所有相邻重复项
class Solution:def removeDuplicates(self, s: str) -> str:res list(s)slow fast 0length len(res)while fast < length:# 如果一样直接换,不一样会把后面的填在slow的位置res[slow] res[fast]# 如果发现和前一个一样,就退一格指针if slow …...
vue(vue2和vue3)项目打包去除console.log
1.Vue2去除 module.exports { configureWebpack: (config) > {// 取消console打印config.optimization.minimizer[0].options.terserOptions.compress.drop_console truereturn {name: "项目名称",resolve: {alias: {"": resolve("src")}}…...
Visual Studio 2022社区版、专业版、企业版功能对比表
https://visualstudio.microsoft.com/zh-hans/vs/compare/...
Codeforces 888 div3 A-G
A. Escalator Conversations 分析 二者身高差为k的倍数且不超过m-1倍,身高差不能为0(即不能在同一个阶梯) C代码 #include<iostream> using namespace std; void solve(){int n,m,k,H,ans0;cin>>n>>m>>k>>H;…...
IDEA如何去掉编辑框右侧的竖线
打开 IntelliJ Idea 软件 依次找到 File—>Settings—>Editor—>General—>Appearance 去掉勾选 Show hard wrap and visual guides (configured in Code Style options)...
3DCoat v2023 激活版下载与安装教程 (数字雕刻程序)
前言 3DCoat 是一款数字雕塑软件,由乌克兰开发。该软件专注于游戏模型的细节设计,集三维模型实时纹理绘制和细节雕刻功能为一身,可以加速细节设计流程,在更短的时间内创造出更多的内容。 一、下载地址 下载链接:分享…...
【Unity/XLua】xlua自带教程示例分析(一)——打印Hello world
第一步 创建Monobehavior脚本 public class Helloworld : MonoBehaviour {void Start(){} }第二步 在类中或Start函数中创建Lua虚拟机环境 LuaEnv luaenv new LuaEnv();第三步 使用LuaEnv的DoString方法直接运行字符串存储的lua语句(字符串前使用可强制不进行转义…...
虚拟机(VMware16)安装rocky9.2详细过程,附镜像下载链接
rocky官方站点 链接: 官方站点 rocky9.2镜像下载路径 链接: Rocky-x86_64-dvd.iso 打开虚拟机,选择新建虚拟机 新建虚拟机 选择典型 由于VMware16没有rocky的版本,所以我们这里选择其他liunx 5.x 内核 64位 因为rocky9默认内核版本就是5开头的…...
C语言新手小白详细教程(6)函数
希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明为什么要使用函数?1.定义一个函数2.调用函数3.定义函数详解 开篇说明 截止目前,我们已…...
力扣1488.避免洪水泛滥
力扣1488.避免洪水泛滥 贪心 二分 将所有晴天存入集合用哈希表存每次池子上一次下雨的日期当下雨并且池子满了时,二分找到上一次下雨之后最近的晴天 class Solution {unordered_map<int,int> mp;public:vector<int> avoidFlood(vector<int>&a…...
System类、BigDecimal类、Calendar类 用法详解
System类 System 类是Java中的一个核心类,提供了访问与系统相关的一些属性和方法。它包含了一些静态字段和静态方法,用于获取系统的标准输入、标准输出、标准错误流,以及加载动态链接库和系统属性等功能。 常见方法: public stat…...
SQLTools插件下载与使用说明
SQLTools是一个专注于SQL优化与管理的plsql developer插件,目的是把一些常用的SQL收集在一起,方便快速解决问题,提高工作效率。 当在SQL或PACKAGE窗口,或者选中表时,会有两个右键菜单: SQLTools聚焦在SQL方面…...
【人脸识别】数据集宝藏合集,速看!
本文将为您介绍10个经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 1 26,090张人脸肤质缺陷采集数据【数据堂】 发布方: 数据堂(北京)科技股份有限公司 发布时间: 2021 简介: 26,090张人脸…...
mysql操作(进阶)
1.数据库约束 数据库自动对数据的合法性进行校验检查的一系列机制,目的是为了保证数据库中能够避免被插入或者修改一些非法数据。 (1)mysql中提供了以下的约束: a.NOT NULL:指定某列不能为null b.UNIQUE࿱…...
[000-01-025].第07节:WorkBench
我的后端学习大纲 我的Drools学习大纲 8. WorkBench 8.1 WorkBench简介: 1.WorkBench是KIE组件中的元素,也称为KIE-WB,是Drools-WB与JBPM-WB的结合体。它是一个可视化的规则编辑器。WorkBench其实就是一个war包,安装到tomcat中就可以运行。…...
JavaScript - 变量声明(let、const 和其他)
目录 一、引言 1. let 的作用 2. const 的作用 3. let 与 const 的选择 4. let 和 const 的性能 5. var, let, const 的对比 6. 常见误区 二、其他变量定义 1. var 关键字 2. 全局对象属性 3. 使用 IIFE(立即调用函数表达式) 4. ES6 模块 总结 …...
AC800PEC PC D231 3BHE025541R0101控制模块面价
AC800PEC PC D231 3BHE025541R0101控制模块面价 AC800PEC PC D231 3BHE025541R0101控制模块面价 AC800PEC PC D231 3BHE025541R0101控制模块面价 AC800PEC PC D231 3BHE025541R0101控制模块引脚线 AC800PEC PC D231 3BHE025541R0101控制模块说明书 AC800PEC PC D231 3BHE0…...
2024年3款免费录屏软件,你的电脑桌面上缺哪一个?
现在,不管是上网课、在家工作,还是拍视频,录屏软件都变得越来越重要了。想做个教学视频、录个操作指南,或者录个游戏的高光时刻,好的录屏软件都能帮你轻松搞定。这篇文章就是要聊聊免费录屏软件一般都有啥功能…...
Python爬虫新手指南及简单实战
网络爬虫是自动化获取网络信息的高效工具,Python因其强大的库支持和简洁的语法成为编写网络爬虫的首选语言。本教程将通过一个具体的案例(基于Microsoft Edge浏览器的简单爬取),指导你使用Python实现一个完整的网络爬虫࿰…...
如何有效开展产业链招商?
产业链招商是一种以产业大数据为依托、以产业链图谱为基础、以产业链分析为核心、以完善产业链结构为目标的招商引资方式。相比于传统招商模式,产业链招商比拼的并不是土地、政策优惠,而是以产业链分析为核心,诊断区域产业链结构及长短板&…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
