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

LeetCode1047. 删除字符串中的所有相邻重复项

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

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

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

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

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

 方法一:使用容易理解的栈

思路:

1.将字符串转换为字符数组,依次遍历

2.创建栈

3.开始栈中为空,将字符压栈。

4.将待压入栈的字符与栈顶元素比较,相同时将栈顶元素弹出,不同时将待压栈字符压栈。

5.遍历结束,返回栈中元素的倒序。

class Solution {public String removeDuplicates(String s) {if (s==null||s.length()<=1){return s;}char[] chars = s.toCharArray();Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++) {if (!stack.isEmpty()&&stack.peek()==chars[i]){stack.pop();}else{stack.push(chars[i]);}}StringBuilder res = new StringBuilder();while (!stack.isEmpty()){res.append(stack.pop());}return String.valueOf(res.reverse());
//两种都可以// while (!stack.isEmpty()){//   res.insert(0,stack.pop());//   }//return String.valueOf(res);}
}

 注:
StringBuffer.insert: 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串本身

方法二:使用数组

思路:两个索引,一个索引遍历j,一个索引比较i,当相同时,将遍历索引后的字符覆盖相同的字符,更新字符串,详细步骤如下图:

 

        public String removeDuplicates(String s) {if (s==null||s.length()<=1){return s;}char[] chars = s.toCharArray();int i = 0;for (int j =1; j < chars.length; j++) {if (i==-1||chars[i]!=chars[j]){chars[++i]=chars[j];}else {i--;}}return  new String(Arrays.copyOfRange(chars,0,i+1));

 注:

Arrays.copyOfRange是一个数组拷贝方法,可以将一个数组中的一部分拷贝到一个新数组中。

int[] original = new int[] {1, 2, 3, 4, 5};
int[] copied = Arrays.copyOfRange(original, start, end);

 original拷贝的源数组,start是拷贝的起始位置(包含),end是拷贝的结束位置(不包含)。

相关文章:

LeetCode1047. 删除字符串中的所有相邻重复项

1047. 删除字符串中的所有相邻重复项 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一…...

3。数据结构(3)

嵌入式软件开发第三部分&#xff0c;各类常用的数据结构及扩展&#xff0c;良好的数据结构选择是保证程序稳定运行的关键&#xff0c;&#xff08;1&#xff09;部分包括数组&#xff0c;链表&#xff0c;栈&#xff0c;队列。&#xff08;2&#xff09;部分包括树&#xff0c;…...

QT停靠窗口QDockWidget类

QT停靠窗口QDockWidget类 QDockWidget类简介函数和方法讲解 QDockWidget类简介 QDockWidget 类提供了一个部件&#xff0c;它可以停靠在 QMainWindow 内或作为桌面上的顶级窗口浮动。 QDockWidget 提供了停靠窗口部件的概念&#xff0c;也称为工具面板或实用程序窗口。 停靠窗…...

【LeetCode】139. 单词拆分

139. 单词拆分&#xff08;中等&#xff09; 思路 首先将大问题分解成小问题&#xff1a; 前 i 个字符的子串&#xff0c;能否分解成单词&#xff1b;剩余子串&#xff0c;是否为单个单词&#xff1b; 动态规划的四个步骤&#xff1a; 确定 dp 数组以及下标的含义 dp[i] 表示 s…...

【三维重建】NeRF原理+代码讲解

文章目录 一、技术原理1.概览2.基于神经辐射场&#xff08;Neural Radiance Field&#xff09;的体素渲染算法3.体素渲染算法4.位置信息编码&#xff08;Positional encoding&#xff09;5.多层级体素采样 二、代码讲解1.数据读入2.创建nerf1.计算焦距focal与其他设置2.get_emb…...

IntelliJ IDEA 社区版2021.3配置SpringBoot项目详细教程及错误解决方法

目录 一、SpringBoot的定义 二、Spring Boot 优点 三、创建一个springboot的项目 四、使用IDEA创建SpringBoot失败案例 一、SpringBoot的定义 Spring 的诞⽣是为了简化 Java 程序的开发的&#xff0c;⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发的。 Spring Boot 翻…...

Qt中QDebug的使用

QDebug类为调试信息(debugging information)提供输出流。它的声明在<QDebug>中&#xff0c;实现在Core模块中。将调试或跟踪信息(debugging or tracing information)写出到device, file, string or console时都会使用QDebug。 此类的成员函数参考&#xff1a;https://doc…...

vue使用路由的query配置项时如何清除地址栏的参数

写vue项目时&#xff0c;如果想通过路由的query配置项把参数从一个组件传到另一个组件&#xff0c;但是又不希望?idxxx显示在地址栏&#xff08;如&#xff1a;http://localhost:8080/test?idxxx的?idxxx&#xff09;&#xff0c;该怎么做&#xff1a; 举一个案例&#xff1…...

Redis-列表(List)

Redis列表(List) 介绍 单键多值Redis 列表是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部&#xff08;左边&#xff09;或者尾部&#xff08;右边&#xff09;它的底层实际是个双向链表&#xff0c;对两端的操作性能很高&#xff0c;通过索…...

ripro主题修改教程-首页搜索框美化教程

先看效果图: 我们来看怎么实现: 1、找到wp-content/themes/ripro/assets/css/diy.css并将下面的内容整体复制进去并保存 /*首页搜索框*/ .bgcolor-fff {background-color: #fff; } .row,.navbar .menu-item-mega>.sub-menu{margin-left:-10px;margin-right:-10px;} .home…...

写作业用白光还是暖光?盘点色温4000K的护眼台灯

台灯的白光或者暖光指的是台灯的色温&#xff0c;低色温的光线看起来发黄发红&#xff0c;高色温的光线发白发蓝。 如果灯光的光源是高品质光源&#xff0c;本身没有蓝光问题&#xff0c;那么色温的选择对护眼的影响是比较少的&#xff0c;更多的是对人学习工作状态&#xff0c…...

Java时间类(一)-- SimpleDateFormat类

目录 1. SimpleDateFormat的构造方法: 时间模式字母: 2. SimpleDateFormat的常用方法: “工欲善其事,必先利其器”。学习时间类之前,需要先学习SimpleDateFormat类。 java.text.SimpleDateFormat类是以与语言环境有关的方式来格式...

07 Kubernetes 网络与服务管理

课件 Kubernetes Service是一个抽象层&#xff0c;用于定义一组Pod的访问方式和访问策略&#xff0c;其作用是将一组Pod封装成一个服务&#xff0c;提供一个稳定的虚拟IP地址和端口号&#xff0c;以便于其他应用程序或服务进行访问。 以下是Kubernetes Service YAML配置文件的…...

并发编程之Atomic原子操作类

基本类型&#xff1a;AtomicInteger、AtomicBoolean、AtomicLong 引用类型&#xff1a;AtomicReference、AtomicMarkableReference、AtomicStampedReference 数组类型&#xff1a;AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray 对象属性原子修改器&#xff1a…...

管家婆辉煌Ⅱ 13.32版安装方法

因管家婆辉煌版已经长期不更新&#xff0c;现已经出现蓝屏的问题&#xff0c;故此新开此贴&#xff0c;慢慢更新安装方法。 首先管家婆下载地址&#xff1a;http://www.grasp.com.cn/download.aspx?id116 先安装sql server 2008 下载后&#xff0c;运行安装&#xff0c;请注…...

常见的接口优化技巧思路

一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c;其中发现最多的就是接口耗时过长的问题&#xff0c;就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。 二、接口优化方案总结 1.批处理 批量思想&#xff1a;批量操作数据…...

【Java EE】-使用Fiddler抓包以及HTTP的报文格式

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享: 在满园弥漫的沉静的光芒之前&#xff0c;一个人更容易看到时间&#xff0c;并看到自己的身影。——史铁生《我与地坛》 主要内容&#xff1a;使用FIddler抓包的…...

Java异步编程

Java异步编程 1、什么是java异步编程2、异步编程有什么作用3、异步编程常用于哪些业务4、异步编程的方式5、Async异步调用Async简介 1、什么是java异步编程 Java异步编程是一种处理并发问题的技术&#xff0c;它可以在执行耗时操作的同时&#xff0c;不阻塞主线程&#xff0c;…...

C++类与对象(二)——构造函数与析构函数

文章目录 一.类的默认6个成员函数二.构造函数1.引例2.构造函数的概念及特性 三.析构函数&#x1f60b;析构函数的特性 前言&#xff1a; 上篇文章初步认识了类以及类的相关知识&#xff0c;本篇将继续深入学习类与对象——类的默认6个成员函数&#xff1a; 一.类的默认6个成员函…...

c++标准模板(STL)(std::array)(四)

定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起) std::array 是封装固定大小数组的容器。 此容器是一个聚合类型&#xff0c;其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数…...

税务季钓鱼攻击中合法远程管理工具的滥用机制与防御策略研究

摘要 随着数字化办公环境的普及&#xff0c;网络攻击手段正经历从传统恶意软件向“无文件”及“合法工具滥用”的深刻转型。2026年3月&#xff0c;微软威胁情报团队披露了一系列针对美国税务季的复杂网络钓鱼活动&#xff0c;这些活动不仅利用了社会工程学原理窃取凭证&#xf…...

工业自动化必备:Kepware+UaExpert实现OPC UA通信的5个关键步骤与常见问题解决

工业自动化实战&#xff1a;Kepware与UaExpert的OPC UA通信全流程解析 在工业4.0时代&#xff0c;设备间的无缝通信已成为智能制造的基础能力。作为工业自动化领域的黄金标准&#xff0c;OPC UA协议凭借其跨平台、高安全性等特性&#xff0c;正在取代传统OPC DA成为工厂数据交互…...

从零搭建硬件测试台:手把手教你用LabVIEW连接菊水PBZ40电源并读取数据

从零搭建硬件测试台&#xff1a;LabVIEW与菊水PBZ40电源的深度集成实战 在工业自动化和科研测试领域&#xff0c;可编程电源的系统集成一直是工程师面临的常见挑战。菊水PBZ40系列作为实验室常用高精度电源&#xff0c;其RS232C接口与LabVIEW图形化编程环境的结合&#xff0c;能…...

OpenClaw设备控制:Qwen3-32B通过USB接口操作硬件实验

OpenClaw设备控制&#xff1a;Qwen3-32B通过USB接口操作硬件实验 1. 为什么选择OpenClaw做硬件控制&#xff1f; 去年夏天&#xff0c;我在工作室调试一个温控风扇项目时&#xff0c;发现传统嵌入式开发存在一个痛点&#xff1a;每次修改控制逻辑都需要重新烧录固件。当我偶然…...

RWKV7-1.5B-g1a部署教程:适配A10/A100/V100等主流GPU,显存占用稳定3.8GB

RWKV7-1.5B-g1a部署教程&#xff1a;适配A10/A100/V100等主流GPU&#xff0c;显存占用稳定3.8GB 1. 模型简介 rwkv7-1.5B-g1a是基于新一代RWKV-7架构的多语言文本生成模型&#xff0c;特别适合中文场景下的轻量级应用。这个1.5B参数的版本在保持较高生成质量的同时&#xff0…...

实战:在无商店的Win10企业版ThinkPad上,通过PowerShell手动部署Lenovo Vantage

1. 为什么需要手动部署Lenovo Vantage 很多ThinkPad用户可能都遇到过这样的困扰&#xff1a;新装的Windows 10企业版系统找不到微软应用商店&#xff0c;而Lenovo Vantage这个必备的管理工具又只能通过商店安装。作为一个长期使用ThinkPad的技术博主&#xff0c;我完全理解这种…...

强化学习算法实战:从Q-learning到PPO,如何选择最适合你的游戏AI开发?

强化学习算法实战&#xff1a;从Q-learning到PPO&#xff0c;如何选择最适合你的游戏AI开发&#xff1f; 在游戏开发领域&#xff0c;AI角色的行为决策直接影响玩家体验。传统规则式AI已无法满足现代游戏对复杂性和适应性的需求&#xff0c;而强化学习&#xff08;Reinforcemen…...

Kronos金融预测模型:当AI学会“阅读“K线语言

Kronos金融预测模型&#xff1a;当AI学会"阅读"K线语言 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 想象一下&#xff0c;当你面对上千只股票…...

嵌入式系统程序运行机制与存储器优化

嵌入式系统程序运行机制深度解析1. 程序运行基础架构1.1 冯诺依曼体系结构现代计算机系统&#xff08;包括嵌入式设备&#xff09;都基于冯诺依曼模型构建&#xff0c;该模型包含五个核心组件&#xff1a;运算器(ALU)&#xff1a;执行算术和逻辑运算控制器(CU)&#xff1a;协调…...

深入解析时钟网络延迟(Clock Network Latency)的优化策略与实现原理

最近在搞一个分布式系统项目&#xff0c;性能压测时总发现吞吐量上不去&#xff0c;延迟时高时低。经过一番排查&#xff0c;定位到了“时钟网络延迟”这个平时不太起眼&#xff0c;但影响巨大的问题上。今天就来聊聊这个“时钟网络延迟”&#xff08;Clock Network Latency&am…...