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

(LeetCode 每日一题)3170. 删除星号以后字典序最小的字符串(贪心+栈)

题目:3170. 删除星号以后字典序最小的字符串

在这里插入图片描述
在这里插入图片描述

思路:贪心+栈,时间复杂度0(n)。
对于每一个‘ * ’,优先选最右边的最小字符,才会使最终得到的字符串最小。
用栈,来记录每个字符的位置下标。细节看注释。

C++版本:

class Solution {
public:string clearStars(string s) {// 栈,记录已遍历过的每个字符的下标stack<int> st[26];for(int i=0;i<s.size();i++){if(s[i]!='*'){st[s[i]-'a'].push(i);continue;}// 贪心,找到最小的字符来删除for(auto &x:st){if(x.size()>0){// 标记为'*',表示删除// 选最大的下标值,也就是最后入栈的s[x.top()]='*';x.pop();break;}}}//剩余非'*'的就是答案string ans="";for(int i=0;i<s.size();i++){if(s[i]=='*') continue;ans.push_back(s[i]);}return ans;}
};

JAVA版本:

class Solution {public String clearStars(String s) {List<Integer>[] st=new ArrayList[26];Arrays.setAll(st,i->new ArrayList<>());char[] c=s.toCharArray();for(int i=0;i<c.length;i++){if(c[i]!='*'){st[c[i]-'a'].add(i);continue;}for(var x:st){if(x.size()>0){c[x.removeLast()]='*';break;}}}int top=-1;for(int i=0;i<c.length;i++){if(c[i]=='*') continue;c[++top]=c[i];}return new String(c,0,top+1);}
}

Go版本:

func clearStars(s string) string {c:=[]byte(s)st:=make([][]int, 26)for i:=0;i<len(s);i++ {if s[i]!='*' {st[s[i]-'a']=append(st[s[i]-'a'],i)continue}for j,x:= range st {if m:=len(x); m>0 {c[x[m-1]]='*'st[j]=x[:m-1]break}}}var ans []bytefor i:=0;i<len(s);i++ {if c[i]!='*' {ans=append(ans,c[i])}}return string(ans)
}
http://www.lryc.cn/news/2404138.html

相关文章:

  • Protobuf 中的类型查找规则
  • Python项目中添加环境配置文件
  • 【区块链基础】区块链的 Fork(分叉)深度解析:原理、类型、历史案例及共识机制的影响
  • IOS 打包账号发布上传和IOS Xcode证书配置
  • 使用 HTML + JavaScript 实现文章逐句高亮朗读功能
  • 【CSS-4】掌握CSS文字样式:从基础到高级技巧
  • 双碳时代,能源调度的难题正从“发电侧”转向“企业侧”
  • 3. 简述node.js特性与底层原理
  • OpenCV CUDA模块图像处理------创建一个模板匹配(Template Matching)对象函数createTemplateMatching()
  • 【Kubernetes】K8s 之 ETCD - 恢复备份
  • CMS、G1、ZGC、Shenandoah 的全面对比
  • RabbitMQ 学习
  • 如何轻松、安全地管理密码(新手指南)
  • AWS App Mesh实战:构建可观测、安全的微服务通信解决方案
  • 9.axios底层原理,和promise的对比(2)
  • 用HTML5 Canvas打造交互式心形粒子动画:从基础到优化实战
  • Gartner《How to Create and Maintain a Knowledge Base forHumans and AI》学习报告
  • 【软件工具】批量OCR指定区域图片自动识别内容重命名软件使用教程及注意事项
  • PyTorch 中cumprod函数计算张量沿指定维度的累积乘积详解和代码示例
  • docker镜像下载到本地,并导入服务器
  • 数据通信与计算机网络——数字传输
  • oracle 归档日志与RECOVERY_FILE_DEST 视图
  • 黄柏基因组-小檗碱生物合成的趋同进化-文献精读142
  • 前端杂货铺——TodoList
  • Spring Boot SSE流式输出+AI消息持久化升级实践:从粗暴到优雅的跃迁
  • camera功能真的那么难用吗
  • Model Context Protocol (MCP) 是一个前沿框架
  • SQL Server 日期时间类型全解析:从精确存储到灵活转换
  • Android Test3 获取的ANDROID_ID值不同
  • [蓝桥杯 2024 国 B] 立定跳远