【LeetCode】3170. 删除星号以后字典序最小的字符串(贪心 | 优先队列)
LeetCode 3170. 删除星号以后字典序最小的字符串(中等)
- 题目描述
- 解题思路
- java代码
题目描述
题目链接:3170. 删除星号以后字典序最小的字符串
给你一个字符串 s 。它可能包含任意数量的 '*'
字符。你的任务是删除所有的 '*'
字符。
当字符串还存在至少一个 '*'
字符时,你可以执行以下操作:
- 删除最左边的
'*'
字符,同时删除该星号字符左边一个字典序 最小 的字符。如果有多个字典序最小的字符,你可以删除它们中的任意一个。
请你返回删除所有 '*'
字符以后,剩余字符连接而成的 字典序最小 的字符串。
示例1:
输入:s = “aaba*”
输出:“aab”
解释:删除 ‘*’ 号和它左边的其中一个 ‘a’ 字符。如果我们选择删除 s[3] ,s 字典序最小。
示例 2:
输入:s = “abc”
输出:“abc”
解释:字符串中没有 ‘*’ 字符。
提示:
- 1 <= s.length <= 10 5 10^{5} 105
- s 只含有小写英文字母和 ‘*’ 字符。
- 输入保证操作可以删除所有的 ‘*’ 字符。
解题思路
-
题目剖析:
- 核心描述:当字符串存在
'*'
字符时,删除最左边的'*'
字符,同时删除该星号字符左边一个字典序 最小 的字符。如果有多个字典序最小的字符,可以删除任意一个。返回删除所有'*'
字符以后,剩余字符连接而成的 字典序最小 的字符串 - 题意明确:
- ① 每次都是删除当前字符串中最左边的
*
,删除*
号的顺序是固定的,从左到右依次删除*
号。(如果删除顺序不固定,每次任意删除一个*
号 ,这题就会变得十分复杂) - ② 删除
*
号之后,还要删除一个*
号左边字典序最小的一个字符。存在多个字典序最小的字符时,删除任意一个
- ① 每次都是删除当前字符串中最左边的
- 核心描述:当字符串存在
-
分析:
- 求 “删除所有
'*'
字符以后,剩余字符连接而成的 字典序最小 的字符串”。当*
字符 左边字典序最小的字符都只有一个时,操作后得到的字符是唯一确定的。 存在多个字典序最小的字符时,选择删除哪个就是关键。由于要删除的是字典序最小的字符,为了让最终字符串字典序最小,就要保留靠前的字符,删除最靠后的那个字符。
- 求 “删除所有
-
解题思路:
- 遍历字符串,每次遇到
'*'
号 都删除前面“字典序最小且下标最大” 的那个字符。为了快速地获取当前字符串中“字典序最小且下标最大” 的字符,在遍历字符串的过程中使用优先队列(堆)来对元素进行维护(字典序小的优先级高,字典序相同时下标越大的元素优先级高),遇到*
字符 时直接删除优先级最高的元素即可。依次记录被删除字符的下标,在初始字符串中排除这些字符 和'*'
字符即为所求。
- 遍历字符串,每次遇到
java代码
class Solution {public String clearStars(String s) {// 优先队列定义queue:字典序小的优先级高,字典序相同时下标越大的元素优先级高PriorityQueue<CharNode> queue = new PriorityQueue<CharNode>((CharNode a, CharNode b) -> (a.ch == b.ch ? b.index - a.index : a.ch - b.ch));// removeSet:记录被删除字符的下标Set<Integer> removeSet = new HashSet<Integer>();// 遇到字符的时候,将字符和下标入队。遇到*号的时候,将队顶元素出队for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if ('*' == ch) {CharNode removeChar = queue.poll();removeSet.add(removeChar.index);continue;}CharNode newChar = new CharNode(ch, i);queue.offer(newChar);}// 没有移除的字符元素拼接得到最终答案StringBuilder res = new StringBuilder();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (ch != '*' && !removeSet.contains(i)) {res.append(ch);}}return res.toString();}
}class CharNode {// 字符char ch;// 字符在字符串中的下标int index;public CharNode(char ch, int index) {this.ch = ch;this.index = index;}
}
相关文章:
【LeetCode】3170. 删除星号以后字典序最小的字符串(贪心 | 优先队列)
LeetCode 3170. 删除星号以后字典序最小的字符串(中等) 题目描述解题思路java代码 题目描述 题目链接:3170. 删除星号以后字典序最小的字符串 给你一个字符串 s 。它可能包含任意数量的 * 字符。你的任务是删除所有的 * 字符。 当字符串还…...
Oracle 用户名大小写控制
Oracle 用户名大小写控制 在 Oracle 数据库中,用户名的默认大小写行为和精确控制方法如下: 一 默认用户名大小写行为 不引用的用户名:自动转换为大写 CREATE USER white IDENTIFIED BY oracle123; -- 实际创建的用户名是 "WHITE"…...

作为过来人,浅谈一下高考、考研、读博
写在前面 由于本人正在读博,标题中的三个阶段都经历过或正在经历,本意是闲聊,也算是给将要经历的读者们做个参考、排雷。本文写于2022年,时效性略有落后,不过逻辑上还是值得大家参考,若所述存在偏颇&#…...

立志成为一名优秀测试开发工程师(第十一天)—Postman动态参数/变量、文件上传、断言策略、批量执行及CSV/JSON数据驱动测试
目录 一、Postman接口关联与正则表达式应用 1.正则表达式解析 2.提取鉴权码。 二、Postman内置动态参数以及自定义动态参数 1.常见内置动态参数: 2.自定义动态参数: 3.“编辑”接口练习 三、图片上传 1.文件的上传 2.上传后内容的验证 四、po…...
Global Security Market知识点总结:主经纪商业务
在全球证券市场的复杂体系中,主经纪商业务(Prime Brokerage)占据着独特且关键的位置。这一业务为大型机构投资者提供了一系列至关重要的服务,极大地影响着金融市场的运作与发展。 一、主经纪商业务的定义 主经纪商业务是投资银行…...

算法练习-回溯
今天开始新的章节,关于算法中回溯法的练习,这部分题目的难度还是比较大的,但是十分锻炼人的思维与思考能力。 处理这类题目首先要注意几个基本点: 1.关于递归出口的设置,这是十分关键的,要避免死循环的产…...
AI代码助手需求说明书架构
AI代码助手需求说明书架构 #mermaid-svg-6dtAzH7HjD5rehlu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6dtAzH7HjD5rehlu .error-icon{fill:#552222;}#mermaid-svg-6dtAzH7HjD5rehlu .error-text{fill:#552222;s…...
PTC过流保护器件工作原理及选型方法
PTC过流保护器件 (Positive Temperature Coefficient,正温度系数热敏电阻)是一种过流保护元件,其工作原理基于电阻值随温度变化的特性。当电路正常工作时,PTC的阻值很小,电流可以顺畅通过;但当…...
RabbitMQ 在解决数据库高并发问题中的定位和核心机制
RabbitMQ 在解决数据库高并发问题中的定位和核心机制 它是间接但极其有效的解决方案,以下内容聚焦如何最大化发挥 RabbitMQ 的潜力: 一、核心机制落地强化方案 1. 精准的异步化切割 关键原则:区分 “必须同步” 和 “可异步” 操作 #merma…...
VSCode主题定制:CSS个性化你的编程世界
在今天的数字世界,编程环境已成为开发者的第二大脑,而主题正是个性化你的创意空间的关键。本文将指导你如何使用CSS自定义VSCode的主题,让你的IDE不仅功能强大,更具视觉个性。 思路分析 设计思路: 创建主色调基调和…...
Windows 下彻底删除 VsCode
彻底删除 VS Code (Visual Studio Code) 意味着不仅要卸载应用程序本身,还要删除所有相关的配置文件、用户数据、插件和缓存。这可以确保你有一个完全干净的状态,方便你重新安装或只是彻底移除它。 重要提示: 在执行以下操作之前,…...

一文带你入门Java Stream流,太强了,mysqldba面试题及答案
list.add(“世界加油”); list.add(“世界加油”); long count list.stream().distinct().count(); System.out.println(count); distinct() 方法是一个中间操作(去重),它会返回一个新的流(没有共同元素)。 Stre…...

FastAPI安全异常处理:从401到422的奇妙冒险
title: FastAPI安全异常处理:从401到422的奇妙冒险 date: 2025/06/05 21:06:31 updated: 2025/06/05 21:06:31 author: cmdragon excerpt: FastAPI安全异常处理核心原理与实践包括认证失败的标准HTTP响应规范、令牌异常的特殊场景处理以及完整示例代码。HTTP状态码选择原则…...

阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库 最近帮朋友 完成一些运维工作 ,这里记录一下。 文章目录 阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库最近帮朋友 完成一些运维工作 ,这里记录一下。 阿里云 RDS MySQL 5.7 添加白名单1. 登录…...

《Brief Bioinform》: 鼠脑单细胞与Stereo-seq数据整合算法评估
一、写在前面 基因捕获效率、分辨率一直是空间转录组细胞类型识别的拦路虎,许多算法能够整合单细胞(single-cell, sc)或单细胞核(single-nuclear, sn)数据与空间转录组数据,从而帮助空转数据的细胞类型注释。此前我们介绍过近年新出炉的Stereo-seq平台&…...

基于Springboot的宠物领养系统
本系统是一个面向社会的宠物领养平台,旨在帮助流浪宠物找到新家庭,方便用户在线浏览、申请领养宠物,并支持管理员高效管理宠物、公告和用户信息。 技术栈: -后端: Java 8Spring BootSpring MVCMyBatis-PlusMySQL 8R…...
AI API、AI 聊天助手,两大服务助力应用智能化转型
网络效应、转换成本——这些一度定义了我们这个时代商业逻辑的规则,在 AI 时代迅速崩塌。创新性功能被无差别克隆包围,差异化优势在底层能力翻新中消散…… 更别说那些决策迟缓、行动无法言出法随的“后来者”,注定与市场窗口擦身而过。唯快…...
Windows 下搭建 Zephyr 开发环境
1. 系统要求 操作系统:Windows 10/11(64位)磁盘空间:至少 8GB 可用空间(Zephyr 及其工具链较大)权限:管理员权限(部分工具需要) 2. 安装必要工具 winget安装依赖工具&am…...
蓝桥杯单片机之通过实现同一个按键的短按与长按功能
实现按键的短按与长按的不同功能 问题分析 对于按键短按,通常是松开后实现其功能,而不会出现按下就进行后续的操作;而对于按键长按,则不太一样,按键长按可能分为两种情况,一是长按n秒后实现后续功能&…...
如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)
背景 在实际项目开发中,依赖的三方库(如 element-plus)难免会遇到 bug。有时候官方虽然已经修复,但新版本升级成本高,或者有兼容性风险。这时,给依赖打补丁是最优雅的解决方案之一。 本文以 element-plus…...
PCB特种工艺应用扩展:厚铜、高频与软硬结合板
新能源汽车与消费电子驱动PCB特种工艺创新,厚铜板降阻30%,软硬结合板渗透率年增15%。 1. 厚铜板:新能源高压平台核心 技术突破:猎板PCB量产10oz厚铜板(传统为3oz),载流能力提升200%,…...
ClusterRole 和 ClusterRoleBinding 的关系及使用
ClusterRole 和 ClusterRoleBinding 是 Kubernetes 中用于控制集群范围权限的两个重要资源,它们共同构成了 Kubernetes RBAC (基于角色的访问控制) 系统的核心部分。 两者的关系 ClusterRole 定义了一组权限规则,指定了可以对哪些资源执行哪些操作 Clu…...
C++ const 修饰符深入浅出详解
C const 修饰符深入浅出详解 📅 更新时间:2025年6月6日 🏷️ 标签:C | const关键字 | 常量 | 多文件编程 | 现代C 文章目录 前言🌟 一、const 是什么?为什么要用?示例✅ const 的四大好处 &…...
Python 数据类型转换、编码处理与文件操作实战指南
一、数据类型转换 int (整型) 与 str (字符串) 之间: str 转 int:int("123") (要求字符串内容必须是数字)。 int 转 str:str(123)。 规则: 使用目标类型的英文名加括号包裹原数据即可。 list (列表) 与 tuple (元组…...

Readest(电子书阅读器) v0.9.53
Readest 是一款开源电子书阅读器,专为沉浸式和深度阅读体验而设计。它是对Foliate的现代重写,利用Next. js 15和Tauri v2在macOS、Windows、Linux和Web上提供无缝的跨平台体验,并即将支持移动平台。 软件特色 多格式支持 支持EPUB、MOBI、K…...

USART 串口通信全解析:原理、结构与代码实战
文章目录 USARTUSART简介USART框图USART基本结构数据帧起始位侦测数据采样波特率发生器串口发送数据 主要代码串口接收数据与发送数据主要代码 USART USART简介 一、USART 的全称与基本定义 英文全称 USART:Universal Synchronous Asynchronous Receiver Transmi…...
Matlab | matlab中的图像处理详解
MATLAB 图像处理详解 这里写目录标题图像处理 MATLAB 图像处理详解一、图像基础操作1. 图像读写与显示2. 图像信息获取3. 图像类型转换二、图像增强技术1. 对比度调整2. 去噪处理3. 锐化处理三、图像变换1. 几何变换2. 频域变换四、图像分割1. 阈值分割2. 边缘检测3. 区域分割五…...

UOS无法安装deb软件包
UOS无法安装deb软件包 问题描述解决办法: 关闭安全中心的应用隔离结果验证 问题描述 UOS安装Linux微信的deb包时,无法正常安装 解决办法: 关闭安全中心的应用隔离 要关闭-安全中心的应用隔离后才可以正常软件和运行。 应用安全----》 允许任意应用。 结果验证 # …...

VUE前端实现自动打包成压缩文件
VUE前端实现自动打包成压缩文件 背景思路实现打包代码实现 尾巴 背景 做前端开发的兄弟们都经历过每次开发完成之后发包需要进行打包,然后将打包文件压缩。每次打好包了都得手动压缩一遍,就有点繁琐。今天我们就使用一种命令行自动压缩的方法࿰…...

2025政务服务便民热线创新发展会议顺利召开,张晨博士受邀分享
5月28日,由新华社中国经济信息社、新华社广东分社联合主办的2025政务服务便民热线创新发展暨“人工智能热线”会议在广州举行。会议围绕“人工智能与新质热线”主题,邀请全国的12345政务服务便民热线主管部门负责人、省市热线负责人和专家学者࿰…...