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

6.7-leetcodeT3170

题目:

算法分析:

单调栈 + 排序应用

考察删除*和其前面的最小字典的字符,要使得剩余的字符字典序最小,考虑删除的字符的位置: 假设删除的字符为c

1.如果删除最前面的c 整体的字符串字典序应该最大

2. 如果删除最后面的c 整体的字符串字典序最大

因此算法的整体思路:

从左到右遍历 s,用 26 个栈记录遍历过的每种字母的下标。

遇到 *,弹出最小字母栈(第一个非空栈)的栈顶。

最后把剩余下标对应的字母按顺序串起来,即为答案。

 代码:

class Solution {public String clearStars(String s) {// 建立26个栈List<Integer>[] stks = new  ArrayList[26];Arrays.setAll(stks, i -> new ArrayList<>());int n = s.length();for(int i = 0; i < n; i++) {char c = s.charAt(i);if(c != '*') {stks[c - 'a'].add(i);} else {for(List<Integer> stk: stks) {if(!stk.isEmpty()) {stk.removeLast();break;}} }}List<Integer> idx = new ArrayList<>();for(List<Integer> stk: stks) {idx.addAll(stk);}Collections.sort(idx);StringBuilder sb = new StringBuilder();for(int i: idx) {sb.append(s.charAt(i));}return sb.toString();}
}

http://www.dtcms.com/a/237607.html

相关文章:

  • AcWing--数据结构1
  • 淘晶驰的串口显示屏T0 T1 K0 X2 X3 X5之间有何区别 各自的优势是啥 划分的依据是啥
  • CAN转PROFINET协议网关之PROFINET转CANfree组态秘诀
  • Go 语言 sync.WaitGroup 深度解析
  • spring:实例工厂方法获取bean
  • 源码级拆解:如何搭建高并发「数字药店+医保购药」一体化平台?
  • hmdp知识点
  • 深入剖析 RocketMQ 中的 DefaultMQPushConsumerImpl:消息推送消费的核心实现
  • SAP 在 AI 与数据统一平台上的战略转向
  • 测试(面经 八股)
  • 2025年—Comfyui聚合插件:Comfyui-LayerStyle 超多实用功能 | 附各功能模型
  • LeetCode 118 杨辉三角 (Java)
  • 【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
  • 如何使用Jmeter进行压力测试?
  • WPF 播放器(AudioPlayer 2025)
  • Java中栈的多种实现类详解
  • 23、字节对齐
  • Xxl-job——源码设计思考
  • 数据通信基础
  • Axure应用交互设计:注册登录页完整交互设计
  • 【Linux操作系统】基础开发工具(yum、vim、gcc/g++)
  • sendDefaultImpl call timeout(rocketmq)
  • 【Python】屏幕像素颜色值的获取
  • SpringBoot-17-MyBatis动态SQL标签之常用标签
  • Unity的日志管理类
  • 【CF】Day78——⭐Codeforces Round 876 (Div. 2) D (LIS | 思维 | DP)
  • 15-Oracle 23ai Vector Search Similarity Search-向量相似性和混合搜索-实操
  • go工具库:hertz api框架 hertz client的使用
  • 【数据结构】详解算法复杂度:时间复杂度和空间复杂度
  • 使用python实现奔跑的线条效果