【LeetCode2434. medium】使用机器人打印字典序最小的字符串

2434. 使用机器人打印字典序最小的字符串

 

解题报告:

首先进行题意转换,其实上述两种操作描述的就是一个栈。

为什么要进行题意转换呢?因为你看题目说有两种操作,但是却不问最少的操作数,说明说不定这两种操作可以合并或者转换,与两种操作无关。

既然是字典序,考虑贪心。

本来想的是,从字符a-z进行遍历,先处理a在处理b这样,但是好像处理不了bdacb这种情况。

发现,最后的输出结果不一定是按照字母顺序来的。(即结果不是abdbc,而是abcdb)

然后发现没这么复杂,从栈的角度考虑贪心,啥时候入栈,啥时候输出,就行了。

AC代码:

class Solution:def robotWithString(self, s: str) -> str:dp = [0]*(len(s)+1)dp[len(s)] = 'z'dp[len(s)-1] = s[len(s)-1]for i in range(len(s)-2,-1,-1):dp[i] = dp[i+1]if s[i] < dp[i]:dp[i] = s[i]i = 0ans = ""sk = []while i < len(s):sk.append(s[i])while len(sk)>0 and sk[-1] <= dp[i+1]:c = sk.pop()ans = ans + ci+=1while len(sk) > 0:ans = ans + sk.pop()return ans

错误思路的代码:

假设当前处理的字符是c。

本来想着是,先往前看相邻的(输出,必须是连续的c字符),然后往后看(只输出c字符,一直到后面没有c字符),然后再往前看(栈内的全都输出,一直到输出完c字符)

几个地方要注意:

1、①那里,没必要,因为他可以和第二种方法合并,没必要先处理当前字符,然后再进流程。而且这些流程外的代码越多,需要加的特判也越多。(比如这里,需要判断pos<s.size(),也需要判断不想把当前值压入,而是直接处理栈内元素的情况)

2、写之前,想好是要每次操作完都pos++,还是下次操作前才pos++。

3、想好最外层for,是按照a~z的字符来,还是按照s这个串来。

4、有那些变量是要捆绑变化和维护的,要注意好。

5、vis和mp具体代表的含义到底是什么,要定义清楚,免得出现歧义。(其实vis虽然这么多地方维护,但是只使用了一次,在流程中的第二步使用到。所以在这之后其实就不需要维护vis了)

class Solution {
public:string robotWithString(string s) {string ans = "";map<char, int> mp, vis;for(auto c:s) {mp[c] += 1;}string sk = "";int pos = 0;for(char c = 'a'; c<='z'; c++) {if(mp[c] == 0) continue;//1、没必要// if(pos < s.size()) {//     sk.push_back(s[pos]);//     vis[s[pos]]++;//     pos++;// }int num = 0;//先往前看while(sk.size()>0&&sk.back() == c) {ans.push_back(c);sk.pop_back();num++;}//再往后看while(vis[c] < mp[c]) {sk.push_back(s[pos]);vis[s[pos]]++;if(s[pos] == c) {vis[c]++;ans.push_back(c);sk.pop_back();num++;}pos++;}// 再往前看while(num < mp[c] && sk.size()>0) {char tmp = sk.back();sk.pop_back();mp[tmp]--;vis[tmp]--;ans.push_back(tmp);}}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天猫精灵方糖拆解报告和芯片详解

折腾&#xff1a; 【记录】天猫精灵方糖拆解过程 后&#xff0c;下面详细整理关于芯片的信息。 总体截图&#xff1a; 各个单元&#xff1a; MEDIATEK ARM MT8516AAAA 1812-BZASH BET02027 ACMQPQ8K 【整理】SoC CPU MEDIATEK MT8516详解 SAMSUNG 810 K9F1G08U0F SC…

【LeetCode 904-medium】水果成篮

1、 这题做法多种多样&#xff0c;看能不能找到五种做法。 其实就是这道题&#xff1a; 力扣 力扣题我的AC代码&#xff1a;&#xff08;法1&#xff1a;边遍历边维护答案&#xff0c;如果遇到f[i]是第三个数就抛弃 除了f[i-1]的另一个数&#xff09; class Solution { pu…

【LeetCode-940 hard】不同的子序列 II

题干&#xff1a; 力扣 解题报告&#xff1a; dp[i]代表以s[i]结尾的子序列数量。 然后再加一层循环枚举倒数第二个字符。 dp之后考虑去重&#xff08;或者直接再用一个数组cnted[26]表示a~z字符结尾的子序列已经有多少个了&#xff09;然后直接作差就可以&#xff0c;因为…

天猫方糖 篇一:新版天猫放糖改造立体声

时间线&#xff1a; 2018年11月23日晚&#xff0c;通过分析得到新版天猫精灵可能支持立体声。后来经过不懈努力下&#xff0c;终于找到接线方式并且当晚测试成功&#xff0c;这将是是民间第一个支持立体声输出的天猫方糖。 2018年11月24日下午&#xff0c;在众群友的指导下&am…

【LeetCode-6223 hard】317场周赛. 移除子树后的二叉树高度

力扣 题干&#xff1a; 解题报告&#xff1a; 我做麻烦了 &#xff0c;其实两遍dfs就可以了&#xff0c;第一遍算高度&#xff0c;第二遍算深度&#xff0c;并且在第二次dfs的时候可以直接维护出答案数组&#xff1a;ans[i]代表删掉i为根节点的子树后树的高度。 其实主要的思…

LINQ TO SQL (一):1. 对象关系设计器(O/R 设计器)

对象关系设计器&#xff08;O/R 设计器&#xff09;的作用&#xff1a; 1. 提供了一个可视化设计图面&#xff0c;用于创建基于数据库中对象的 LINQ to SQL 实体类和关系&#xff1b;创建映射到数据库中的对象的对象模型。 2. 生成一个强类型 DataContext&#xff0c;用于在实体…

LINQ TO SQL和Entity Framework 的关系 你了解多少?

1. LINQ TO SQL 和EF 特点&#xff1a; LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射。其中包括的有DBFrist Code Frist ModeL Frist 三种中方式 来进行和数据库之间的访问。只是形式不同而已本质没有什么区别。都是ORM 之间…

【LeetCode - 1235. hard】规划兼职工作

题干&#xff1a; 先来看简单版本&#xff1a; n个区间&#xff0c;求最大的不相交区间数 【51NOD—贪心算法专题】 D 做任务一 区间贪心最大不相交子区间数_荷叶田田_的博客-CSDN博客 如果限定这道题的报酬都是1&#xff0c;那么就转化成【最大不相交区间数】了。 那道题…

HTML 链接 强制打开“另存为...”弹出式文本链接打开HTML

现在的HTML5里有一个download属性&#xff0c;可以直接进行另存为&#xff0c;还可以自己重新命名文件。。。 <a href"file link" download"filename.ext" target"_blank">Click here to download</a> HTML <a> download 属性…

【转】 CPU、MCU、MPU、DSP的区别和介绍

CPU&#xff1a; 中央处理器&#xff08;CPU&#xff0c;Central Processing Unit&#xff09;是一块超大规模的集成电路&#xff0c;是一台计算机的运算核心&#xff08;Core&#xff09;和控制核心&#xff08; Control Unit&#xff09;。它的功能主要是解释计算机指令以及…

禁止word另存为,禁止图片另存为excel禁止另存为

在很多企事业单位&#xff0c;处于商业机密保护的需要&#xff0c;常常需要禁止一些文件格式的“另存为”功能&#xff0c;防止通过“另存为”将文件另行保存&#xff0c;据为己有的目的&#xff1b;尤其是在局域网中访问服务器共享文件的时候&#xff0c;常常需要禁止将共享文…

Office web app server2013详细的安装和部署

SharePoint 2013集成Office web apps server2013详细的安装和部署 安装前的需要理解的&#xff1a; 1、Office Web Apps 只能由使用基于声明的身份验证的 SharePoint 2013 Web 应用程序使用。Office Web Apps 呈现和编辑在使用经典模式身份验证的 SharePoint 2013 Web 应用程序…

借助office web apps实现在线预览和在线编辑

我所有的代码都是用go语言编写&#xff0c;你可以直接编译后使用&#xff0c;不用再有其他的操作。 最近项目实在太忙&#xff0c;这几天才有时间&#xff0c;这次是重头戏&#xff0c;要好好琢磨一下怎么写&#xff0c;才能更简洁的说清楚一切。 上一节&#xff0c;我们已经安…

【转】WOPI host消息体结构

wopi协议通过JSON格式传递参数&#xff1a; {"AllowExternalMarketplace":{"type":"bool","default":false,"optional":true},"BaseFileName":{"type":"string","optional":false}…

Dbml文件提取建表TSql-CodeSmith

在昨天一个大学师弟&#xff0c;他问我能不能将LinqToSql文件转化为创建表的TSql语句&#xff0c;他是刚开始学习.NET&#xff0c;所以在网上下些示例看&#xff0c;但苦于没有数据库。所以就有了这一篇博客&#xff0c;作为我的Code生成技术的CodeSimth的最后一篇示例。在下一…

(译)你应该知道的jQuery技巧

帮助提高你jQuery应用的简单小技巧。 回到顶部按钮图片预加载判断图片是否加载完自动修补破损图像Hover切换class类禁用输入停止正在加载的链接toggle fade/slide简单的手风琴使两个DIV同等高度在浏览器标签/新窗口打开外部链接根据文本获取元素可见变化的触发Ajax调用错误处理…

DNS的A、CNAME、MX、NS、TXT、SPF记录

前言 最近工作过程中需要设定邮件服务器&#xff0c;其中涉及到dns服务器的设定。 整理并且记录自己的理解。 种类 A、CNAME、MX、NS、TXT、SPF 下面挨个介绍一下。 A记录/AAAA记录 IPv4&#xff1a; 示例&#xff1a;ns1.exmaple.com. IN A 198.51.100.2解释&#xff1a…

【转】新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序(续1)

上周星期天开通了博客并发布了第一篇文章《新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序》&#xff0c;汇集了一些比较流行的技术和开源项目&#xff0c;也把自己的程序架构、部分代码风格、前端表现简单做了一些展示&#xff0c;引起了近100位朋友的评论。特…

CCNA-Cisco-Packet-Tracerchs(思科官网)安装教程以及使用

Cisco-Packet-Tracerchs 思科官网模拟器&#xff0c;各大高校与中职都在使用。 但是由于支持的命令不太多&#xff0c;适用于NA阶段以及入门阶段的人群使用。 以下是免费百度网盘链接&#xff1a; https://pan.baidu.com/s/136fsYRnAfzGoj0DsQFaYTg 提取码: qa4e 复制这段内容…

CCNA-VLAN讲解与交换机三种端口模式(Acess,Trunk,Hybrid)小白入门级

VLAN讲解与三种端口模式(Acess,Trunk,Hybrid) TAG:所有文章均为原创&#xff0c;可以转载但请声明&#xff0c;是在学校里面做的&#xff0c;使用不了EVE和ENSP&#xff0c;请各路大神嘴下留情&#xff0c;如文章内容有误导请及时联系博主----来自一个17岁的中专生。 1.什么是V…