栈+贪心,LeetCode 2434. 使用机器人打印字典序最小的字符串

一、题目

1、题目描述

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

  • 删除字符串 s第一个 字符,并将该字符给机器人。机器人把这个字符添加到 t 的尾部。
  • 删除字符串 t最后一个 字符,并将该字符给机器人。机器人将该字符写到纸上。

请你返回纸上能写出的字典序最小的字符串。

2、接口描述

python3
复制代码
 ​
python 复制代码
class Solution:
    def robotWithString(self, s: str) -> str:
复制代码

3、原题链接

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


二、解题报告

1、思路分析

可见 字符串 t 就是一个栈,我们可以考虑在任意时刻让栈顶出栈

为了得到字典序最小结果,我们何时不得不出栈呢?

当栈顶不大于剩余字符的最小值时,我们不得不出栈

那么维护栈,并模拟即可

2、复杂度

时间复杂度: O(N)空间复杂度:O(N)

3、代码详解

python3
复制代码
 ​
python 复制代码
from string import ascii_lowercase
from collections import Counter

class Solution:
    def robotWithString(self, s: str) -> str:
        n = len(s)

        mi = 0
        res = []
        cnt = Counter(s)
        st = []
        for x in s:
            cnt[x] -= 1
            while mi < 25 and cnt[ascii_lowercase[mi]] == 0:
                mi += 1
            st.append(x)
            while st and st[-1] <= ascii_lowercase[mi]:
                res.append(st.pop())

        return ''.join(res)
复制代码
 ​
相关推荐
Elias不吃糖几秒前
克隆图(LeetCode 133)——用数组做映射的 DFS 解法
c++·算法·leetcode·深度优先
iiiiii1110 分钟前
【论文阅读笔记】IDAQ:离线元强化学习中的分布内在线适应
论文阅读·人工智能·笔记·学习·算法·机器学习·强化学习
秋深枫叶红11 分钟前
嵌入式第二十三篇——数据结构基本概念
linux·数据结构·学习·算法
Zsy_05100318 分钟前
【数据结构】二叉树介绍及C语言代码实现
c语言·数据结构·算法
Ayanami_Reii18 分钟前
基础数学算法-移棋子游戏
数学·算法·游戏·博弈论·sg函数
谁刺我心20 分钟前
蓝桥杯C++常用STL
c++·算法·蓝桥杯
wubba lubba dub dub75023 分钟前
第二十七周 学习周报
学习·算法·机器学习
小白程序员成长日记26 分钟前
力扣每日一题 2025.11.30
数据结构·算法·leetcode
崎岖Qiu27 分钟前
二叉树的非递归后序遍历-双栈法
算法·二叉树·力扣·深度优先遍历·
竹杖芒鞋轻胜马,夏天喜欢吃西瓜31 分钟前
哈希算法解析
算法·哈希算法