2434. Using a Robot to Print the Lexicographically Smallest String
Description
You are given a string s
and a robot that currently holds an empty string t
. Apply one of the following operations until s
and t
are both empty:
- Remove the first character of a string
s
and give it to the robot. The robot will append this character to the stringt
. - Remove the last character of a string
t
and give it to the robot. The robot will write this character on paper.
Return the lexicographically smallest string that can be written on the paper.
Example 1:
Input: s = "zza" Output: "azz" Explanation: Let p denote the written string. Initially p="", s="zza", t="". Perform first operation three times p="", s="", t="zza". Perform second operation three times p="azz", s="", t="".
Example 2:
Input: s = "bac" Output: "abc" Explanation: Let p denote the written string. Perform first operation twice p="", s="c", t="ba". Perform second operation twice p="ab", s="c", t="". Perform first operation p="ab", s="", t="c". Perform second operation p="abc", s="", t="".
Example 3:
Input: s = "bdda" Output: "addb" Explanation: Let p denote the written string. Initially p="", s="bdda", t="". Perform first operation four times p="", s="", t="bdda". Perform second operation four times p="addb", s="", t="".
Constraints:
1 <= s.length <= 105
s
consists of only English lowercase letters.
Solution
using-a-robot-to-print-the-lexicographically-smallest-string.py
class Solution:
def robotWithString(self, s: str) -> str:
N = len(s)
res = []
stack = []
count = Counter(s)
for x in s:
stack.append(x)
if count[x] == 1:
del count[x]
else:
count[x] -= 1
while stack and count and stack[-1] <= min(count):
res.append(stack.pop())
if stack:
res += stack[::-1]
return "".join(res)