当前位置:   article > 正文

leetcode2434. 使用机器人打印字典序最小的字符串 出栈顺序 贪心+栈_打印字典序最小的字符串 给你一个字符串s 和一个机器人,机器人当前有一个空字符串

打印字典序最小的字符串 给你一个字符串s 和一个机器人,机器人当前有一个空字符串
  • 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 只包含小写英文字母。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

题解

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

  • 对于任意时刻,当前可供选择的字符包括栈顶元素(如果栈非空),没有入栈的元素(当前索引i及之后的全部元素),我们从这两个元素中选取最小值,进行操作

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;   
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45109
推荐阅读
相关标签
  

闽ICP备14008679号