leetcode2434. 使用机器人打印字典序最小的字符串 出栈顺序 贪心+栈

这篇具有很好参考价值的文章主要介绍了leetcode2434. 使用机器人打印字典序最小的字符串 出栈顺序 贪心+栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • https://leetcode.cn/problems/using-a-robot-to-print-the-lexicographically-smallest-string/
            给你一个字符串 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 <= s.length <= 105
s 只包含小写英文字母。

题解

  • 有一个初始为空的栈t,给定字符的入栈顺序,求字典序最小的出栈序列。因为是最小的字典序列,所以本题可以使用贪心策略。

  • 对于任意时刻,当前可供选择的字符包括栈顶元素(如果栈非空),没有入栈的元素(当前索引i及之后的全部元素),我们从这两个元素中选取最小值,进行操作文章来源地址https://www.toymoban.com/news/detail-620782.html

class Solution {
public:
    string robotWithString(string s) {
        int n = s.size();
        string res;
        stack<char> t;

        // 用一个数组来记录索引i到结尾的最小元素
        vector<char> min_i2end(n);
        min_i2end[n - 1] = s[n - 1];
        for (int i = n - 2; i >= 0; --i) {
            min_i2end[i] = min(min_i2end[i + 1], s[i]);
        }

        for (int i = 0; i < n; ++i) {
            // 如果后续没有更小的值了,那么就将栈顶元素写入结果
            while (!t.empty() && t.top() <= min_i2end[i]){
                res.push_back(t.top());
                t.pop();
            }
            // 否则入栈
            t.push(s[i]);
        }
        // 后处理
        while (!t.empty()) {
            res.push_back(t.top());
            t.pop();
        }
        return res;   
    }
};

到了这里,关于leetcode2434. 使用机器人打印字典序最小的字符串 出栈顺序 贪心+栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode657. 机器人能否返回原点

    题目描述 解题思路 执行结果 leetcode657. 机器人能否返回原点 题目描述 机器人能否返回原点 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。

    2024年02月11日
    浏览(31)
  • Leetcode-657. 机器人能否返回原点

    题目: 在二维平面上,有一个机器人从原点  (0, 0)  开始。给出它的移动顺序,判断这个机器人在完成移动后是否在   (0, 0)  处结束 。 移动顺序由字符串  moves  表示。字符  move[i]  表示其第  i  次移动。机器人的有效动作有  R (右), L (左), U (上)和  D (下)

    2024年02月20日
    浏览(28)
  • ​LeetCode解法汇总874. 模拟行走机器人

    https://github.com/September26/java-algorithms 机器人在一个无限大小的 XY 网格平面上行走,从点  (0, 0)  处开始出发,面向北方。该机器人可以接收以下三种类型的命令  commands  : -2  :向左转  90  度 -1  :向右转  90  度 1 = x = 9  :向前移动  x  个单位长度 在网格上有一些格子

    2024年02月11日
    浏览(27)
  • Leetcode.1041 困于环中的机器人

    Leetcode.1041 困于环中的机器人 Rating : 1521 在无限的平面上,机器人最初位于 (0, 0) 处, 面朝北方 。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一: \\\"G\\\" :直走 1 个单位 \\\"L\\\" :左转

    2023年04月18日
    浏览(30)
  • 【Python微信机器人】第六七篇: 封装32位和64位Python hook框架实战打印微信日志

    目前的系列目录(后面会根据实际情况变动): 在windows11上编译python 将python注入到其他进程并运行 注入Python并使用ctypes主动调用进程内的函数和读取内存结构体 调用汇编引擎实战发送文本和图片消息(支持32位和64位微信) 允许Python加载运行py脚本且支持热加载 利用汇编和反汇编

    2024年02月04日
    浏览(40)
  • 力扣(leetcode)第657题机器人能否返回顶点(Python)

    题目链接:657.机器人能否返回顶点 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(

    2024年01月17日
    浏览(33)
  • Leetcode-每日一题【剑指 Offer 13. 机器人的运动范围】

    地上有一个m行n列的方格,从坐标  [0,0]  到坐标  [m-1,n-1]  。一个机器人从坐标  [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为

    2024年02月13日
    浏览(34)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 哈希

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月15日
    浏览(32)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 二分

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月11日
    浏览(42)
  • (搜索) 剑指 Offer 13. 机器人的运动范围 ——【Leetcode每日一题】

    难度:中等 地上有一个 m 行 n 列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于 k 的格子。例如,当 k 为18时,机器人能够进入方格

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包