首页 > 其他分享 >Day 10:100322. 删除星号以后字典序最小的字符串

Day 10:100322. 删除星号以后字典序最小的字符串

时间:2024-06-02 16:29:46浏览次数:29  
标签:10 delete 删除 字符 builder 100322 size Day 字典

Leetcode 100322. 删除星号以后字典序最小的字符串

给你一个字符串 s 。它可能包含任意数量的 ‘’ 字符。你的任务是删除所有的 '’ 字符。
当字符串还存在至少一个 ‘*’ 字符时,你可以执行以下操作:

  • 删除最左边的 ‘*’ 字符,同时删除该星号字符左边一个字典序 最小 的字符。如果有多个字典序最小的字符,你可以删除它们中的任意一个。

请你返回删除所有 ‘*’ 字符以后,剩余字符连接而成的 字典序最小 的字符串。

image.png

删除 * 号左边一个字典序最小的字符,有多个,删除一个,虽是如此,但是还有另一个要求,剩余字符串连接而成的字典序最小,因此要删除离 * 号最近的一个字典序最小的字符。
用一个 26 维的数组保存每个字母出现的位置,遇到星号,查找字典序最小的字符的索引。
但是不能直接删除,如果直接删除会影响保存的索引,因此用一个数组先保存删除的索引,之后从后往前删除。

完整代码

class Solution {
    public String clearStars(String s) {
        StringBuilder builder = new StringBuilder(s);
        List<Integer>[] chars = new List[26];
        List<Integer> delete = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            chars[i] = new ArrayList<>();
        }

        for (int i = 0; i < builder.length(); i++) {
            if (builder.charAt(i) == '*') {
                delete.add(i);
                for (int j = 0; j < 26; j++) {
                    int size = chars[j].size();
                    if (size > 0) {
                        int num = chars[j].get(size - 1);
                        chars[j].remove(size - 1);
                        delete.add(num);
                        break;
                    }
                }
            } else {
                chars[builder.charAt(i) - 'a'].add(i);
            }
        }
        Collections.sort(delete);
        for (int i = delete.size() - 1; i >= 0; i--) {
            builder.deleteCharAt(delete.get(i));
        }
        return String.valueOf(builder);
    }
}

标签:10,delete,删除,字符,builder,100322,size,Day,字典
From: https://blog.csdn.net/weixin_46091073/article/details/139393233

相关文章

  • Day 9:2829. k-avoiding 数组的最小总和
    Leetcode2829.k-avoiding数组的最小总和给你两个整数n和k。对于一个由不同正整数组成的数组,如果其中不存在任何求和等于k的不同元素对,则称其为k-avoiding数组。返回长度为n的k-avoiding数组的可能的最小总和。n个不同正整数的最小总和,那就是从1......
  • 利用AutoUnattend自动应答文件安装Windows Server 2025 26100正式版
    安装视频:https://www.bilibili.com/video/BV1ji421v7jZ/AutoUnattend自动应答文件,安装到第一个硬盘(容量大于100G),安装后登录用户Administrator的密码:pass1234AutoUnattend自动应答文件已经上传到:https://bbs.pcbeta.com/viewthread-2004613-1-1.html ......
  • 基于DAYU800开发板的OpenHarmony设备发环境搭建
    简介润和-SCDAYU800开发平台基于平头哥高性能RISC-V开源架构曳影TH1520芯片,集成4核高性能RISC-V处理器玄铁C910的平头哥曳影1520,AI算力达4TOPs支持蓝牙、音频、视频和摄像头等功能,支持多种视频输入输出接口,并提供丰富的扩展接口,可用于工控平板、智慧大屏、智......
  • 牛客网刷题 | BC110 X形图案
    目前主要分为三个专栏,后续还会添加:    专栏如下:          C语言刷题解析    C语言系列文章    我的成长经历感谢阅读!初来乍到,如有错误请指出,感谢!描述KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组......
  • 牛客网刷题 | BC107 箭形图案
    目前主要分为三个专栏,后续还会添加:    专栏如下:          C语言刷题解析    C语言系列文章    我的成长经历感谢阅读!初来乍到,如有错误请指出,感谢!描述KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组......
  • Flutter开发效率提升1000%,Flutter Quick教程之对写好的Widget进行嵌套
    通常写代码的时候,我们是先写好外面的Widget,再写里面的Widget。但是,也有的时候,我们写好了一个Widget,但是我们觉得有必要再在外面嵌套一个Widget,这时候应该怎么做呢?(还有其他方式,本篇讲的就是快捷的方式)1,首先,我们左键选中要嵌套的Widget。2,这时候,我们要选择的嵌套在外面的Widge......
  • 万兴全能格式转换器v15.5.10.97绿色版
    软件介绍万兴全能格式转换器,又叫万兴优转,国产全能音视频格式转换解决方案。具有音视频格式转换、合并视频、压缩视频、录制视频、下载视频、DVD刻录等功能。以超快的转换速度及强大的功能在国外名声大噪,转换速度是市面同类产品的30倍,操作简便,支持158种视频格式无损转换,批量转......
  • day45 1049.最后一块石头的重量II 494.目标和 474.一和零
    1049.最后一块石头的重量II本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。本题物品的重量为stones[i],物品的价值也为stones[i]。对应着01背包里的物品重量weight[i]和物品价值value[i]。思路:动规五部曲1.确定dp数组以及下......
  • 编写程序,创建一个集合Set,其中含有100个元素,每个元素是0~1000之间的一个随机数。打印
    实验代码: importrandomasrSet=set()foriinrange(100):num=r.randint(0,1000)Set.add(num)#使用列表推导式和join方法来输出结果print('{'+','.join(str(i)foriinSet)+'}')iflen(Set)==100:print("随机数没有出现重复!")......
  • day46 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ
    完全背包理论基础有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。而完全......