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

leetcode 3170. 删除星号以后字典序最小的字符串 中等

给你一个字符串 s 。它可能包含任意数量的 '*' 字符。你的任务是删除所有的 '*' 字符。

当字符串还存在至少一个 '*' 字符时,你可以执行以下操作:

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

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

示例 1:

输入:s = "aaba*"

输出:"aab"

解释:

删除 '*' 号和它左边的其中一个 'a' 字符。如果我们选择删除 s[3] ,s 字典序最小。

示例 2:

输入:s = "abc"

输出:"abc"

解释:

字符串中没有 '*' 字符。

提示:

  • 1 <= s.length <= 10^5
  • s 只含有小写英文字母和 '*' 字符。
  • 输入保证操作可以删除所有的 '*' 字符。

分析:用一个长度为 26 的 vector 数组,记录每个对应字符出现的位置,并用 index 记录当前出现的字典序最小的字符的下标,用与字符串 s 等长的 flag 数组记录对应位置是否被删除。遍历 s,如果是字符,则对应下标的 vector 记录这个位置; 如果是 *,则将 vector 数组的 index 位置的最后一个位置去除,flag 对应位置标记 1.遍历完数组后,将所有 flag 为 0 的位置拼接,即可得到答案。

class Solution {
public:string clearStars(string s) {int index=30,flag[100010]={0};vector<int>pos[30];for(int i=0;i<s.length();++i){if(isalpha(s[i]))pos[s[i]-'a'].push_back(i),index=min(index,s[i]-'a');else{flag[i]=1;flag[pos[index][pos[index].size()-1]]=1;pos[index].pop_back();while(!pos[index].size()&&index<26)index++;}}string ans;for(int i=0;i<s.length();++i)if(!flag[i])ans+=s[i];return ans;}
};

相关文章:

  • Java毕业设计:办公自动化系统的设计与实现
  • 分类与扩展
  • MyBatis 获取插入数据后的自增 ID 值
  • 力扣面试150题--除法求值
  • [特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
  • 提高Python编程效率的工具推荐
  • 工业生产设备机械滑台:讲述用途及性能
  • 前端杂货铺——TodoList
  • 港科大快手提出统一上下文视频编辑 UNIC,各种视频编辑任务一网打尽,还可进行多项任务组合!
  • win11系统 Docker Desktop 突然提示Docker Engine stopped解决情况之一
  • 利用frp和腾讯云服务器将内网暴露至外网(内网穿透)
  • 《真假信号》速读笔记
  • 微服务架构的性能优化:链路追踪与可观测性建设
  • 头像上传功能的实现
  • btstack协议栈---Ubuntu驱动CSR8510 USB Dongle
  • 八、【ESP32开发全栈指南:UDP客户端】
  • 【强化学习】——04Model-Based RL
  • 运维_集运维linu自动化运维和部署
  • 会计 - 合并4 - 或有对价的会计处理
  • Python基于Django的文件销毁系统【附源码、文档说明】
  • 常州网站建设开发/世界500强企业排名
  • 西樵网站建设公司/电脑培训机构
  • 郑州市疫情防控指挥部电话号码/朝阳区seo
  • b2b网站有那些/百度小程序对网站seo
  • 网站开发和维护合同/优化官网咨询
  • 苏州网站搜索优化/seo搜索引擎优化兴盛优选