题目:

给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串:

删除字符串 s 的 第一个 字符,并将该字符给机器人。机器人把这个字符添加到 t 的尾部。
删除字符串 t 的 最后一个 字符,并将该字符给机器人。机器人将该字符写到纸上。
请你返回纸上能写出的字典序最小的字符串。

示例 1:

输入:s = "zza"
输出:"azz"
解释:用 p 表示写出来的字符串。
一开始,p="" ,s="zza" ,t="" 。
执行第一个操作三次,得到 p="" ,s="" ,t="zza" 。
执行第二个操作三次,得到 p="azz" ,s="" ,t="" 。
示例 2:

输入:s = "bac"
输出:"abc"
解释:用 p 表示写出来的字符串。
执行第一个操作两次,得到 p="" ,s="c" ,t="ba" 。
执行第二个操作两次,得到 p="ab" ,s="c" ,t="" 。
执行第一个操作,得到 p="ab" ,s="" ,t="c" 。
执行第二个操作,得到 p="abc" ,s="" ,t="" 。
示例 3:

输入:s = "bdda"
输出:"addb"
解释:用 p 表示写出来的字符串。
一开始,p="" ,s="bdda" ,t="" 。
执行第一个操作四次,得到 p="" ,s="" ,t="bdda" 。
执行第二个操作四次,得到 p="addb" ,s="" ,t=""

先把字符串遍历一遍,用一个数组记录每个元素出现的次数,每次遍历的时候,先把元素入栈,其次该元素出现的次数-1,然后求出剩余字符串中字典序最小的字符,如果栈顶元素是小于或等于最小字符(栈非空),则弹栈,不断循环,直到栈空或者栈顶元素大于剩余字符串中的最小字符,接着直到把这个最小字符入栈。由于遍历到最后没了剩余字符,到了最边界点,上述的弹栈循环一定可以将栈弹空。

class Solution {
public:
string robotWithString(string s) {string ans;int sum[26]={0};stack<char> ai;for(int i=0;i<s.size();++i)++sum[s[i]-'a'];for(int i=0;i<s.size();++i){int x=s[i]-'a';int m=0;sum[x]--;ai.push(s[i]);while(m<26&&sum[m]==0)m++;while(!ai.empty()&&ai.top()-'a'<=m){ans+=ai.top(),ai.pop();}}return ans;}
};

我的代码:

class Solution {
public:bool judge(int x,int *sum){
for(int i=0;i<x;++i){
if(sum[i]>0)return false;
}return true;}string robotWithString(string s) {stack<char> a;string b;int sum[26]={0};int flag=0;for(int i=0;i<s.size();++i)sum[s[i]-'a']++;for(int i=0;i<s.size();++i){if(i==(s.size()-1)&&s[i]=='z'){flag=1;continue;}sum[s[i]-'a']--;while(!a.empty()&&s[i]-a.top()>0&&judge(a.top()-'a',sum)){b+=a.top();a.pop();}a.push(s[i]);}while(!a.empty())b+=a.top(),a.pop();if(flag)b+='z';return b;}
};

之前就是当最后一个字符是z的时候有问题,最后是z的时候应该是最后一个输出,特殊考虑一下

力扣第314周赛第三题相关推荐

  1. (补)20200911:力扣204周周赛题解下

    力扣204周周赛题解下 题目 思路与算法 代码实现 写在最后 题目 3.1568. 使陆地分离的最少天数 思路与算法 本周周赛第三题勉强可以看看,第四题超出我目前的水平,跳过.第三题是一个典型的dfs ...

  2. 20200907:力扣203周周赛题解记录

    力扣203周周赛题解 题目一: 1.圆形赛道上经过次数最多的扇区 示例 解题思路与代码实现 本题的思路为优化整个起点与终点,理清关系,起点到终点的过程中,分为起点小于终点,起点大于终点,起点等于终点, ...

  3. 20201221:力扣220场周赛题解

    力扣220场周赛 题目 思路与算法 代码实现 写在最后 题目 重新格式化电话号码 删除子数组的最大得分 跳跃游戏 VI 思路与算法 简单的string操作,用cpp或者java均可. 使用一个map来 ...

  4. 20201219:力扣219周周赛题解

    力扣219周周赛题解 题目 思路与算法 代码实现 复杂度分析 题目 比赛中的配对次数 十-二进制数的最少数目 石子游戏 VII 堆叠长方体的最大高度 思路与算法 比赛中的配对次数 两两比赛,淘汰剩一支 ...

  5. 20201008:力扣209周周赛题解(下)

    力扣209周周赛题解(下) 题目 思路与算法 代码实现 写在最后 题目 可见点的最大数目 使整数变为 0 的最少操作次数 思路与算法 第一题注意添加角度时atan2的范围是正负π,因此注意差值可能超出 ...

  6. 20201007:力扣209周周赛题解记录(上)

    力扣209周周赛题解记录(上) 题目 思路与算法 代码实现 复杂度分析 题目 特殊数组的特征值 奇偶树 思路与算法 第一题单纯的暴力就行,应该是可以用二分之类的改善复杂度,没必要赘述,直接上暴力遍历, ...

  7. 20200910:力扣204周周赛题解上(Java/Python/Cpp)

    力扣204周周赛题解上 题目 思路与算法 代码实现 写在最后 题目 1.1566. 重复至少 K 次且长度为 M 的模式 2.1567. 乘积为正数的最长子数组长度 思路与算法 热身题不要求算法技巧, ...

  8. 20200819:力扣202周周赛题解记录

    力扣202周周赛题解记录 题目一:[存在连续三个奇数的数组](https://leetcode-cn.com/problems/three-consecutive-odds/) 代码实现 题目二:[使 ...

  9. 20200815:力扣201周周赛题解记录下

    力扣201周周赛题解记录下 题目 思路与算法 代码实现 题目 和为目标值的最大数目不重叠非空子数组数目 1547. 切棍子的最小成本 在这里插入图片描述 思路与算法 第3题还是一个简单的模拟,用set ...

最新文章

  1. mysql 避免使用临时表_从日期范围中选择时防止MySQL使用临时表
  2. VTK:Utilities之MassProperties
  3. vue如何使浏览器url固定_怎么给 vue的 vue-router url地址最后加上 / 斜杠
  4. (23)FPGA锁存器与缓冲器的区别
  5. 解码(五):sws_getContext和sws_scale像素格式和尺寸转换函数详解
  6. 首都师范大学数学专业考研试题参考解答
  7. Web2.0创业者面临艰难选择:出售还是发展
  8. Altium和 Cadence Allegro 画的PCB导入Slwave
  9. 基于sa866的电磁搅拌器计算机控制系统,一种新型电磁搅拌器计算机控制系统
  10. 网页中的字体对应的word字体大小对照表
  11. typecho图片插件_Typecho弹窗相册插件HighSlide1.4.7更新
  12. 在用docker部署nginx时,出现curl: (6) Could not resolve host: localhsot; 未知的错误
  13. 无理数的无理数次幂的结果可以是有理数?(以〖√2〗^√2为例)
  14. 2022年中国中式快餐行业发展现状、市场竞争格局及未来发展趋势分析[图]
  15. 计算机应用基础实训报告excel,excel实验报告模板
  16. c++ 两个Map容器的差异性比较,返回差异内容
  17. 阿尔法小蛋机器人热点密码_科大讯飞阿尔法小蛋智能机器人使用说明
  18. 凿 壁 偷 光 是白话文的,不要文言文的
  19. jmeter察看结果树-响应数据:乱码
  20. AllWinner T113 ddr测试

热门文章

  1. 经典分频器——奇数分频(3分频,5分频,任意分频)
  2. Proxmox VE 7.2 iso 镜像重置 pve root密码
  3. 路由器突然断网服务器无响应,突然断网了 怎样判断路由器是不是坏了?
  4. 当前时间节点的LiteOS评述 2018.9
  5. 给大家分享几个靠写代码赚钱的方法
  6. S7-200 SMART PLC与S7-1500进行S7通信的具体步骤
  7. WebView Cache 缓存清除
  8. RPA优势解密丨到底能做什么?为何深受追捧?
  9. 多种RPA机器人常见应用行业及场景
  10. 几个特性,快速上手Kotlin