less than 1 minute read

Problem Statement

leetcode problem link

Brute Force [TLE]

class Solution:
    def robotWithString(self, s: str) -> str:
        queue = deque(list(s))
        t_queue = deque()
        self.res = []

        def dfs(q, t, curr):
            if len(curr) > len(s):
                return

            if not q and not t:
                curr_str = ''.join(curr)
                res_str = ''.join(self.res)
                if not self.res or (res_str and res_str > curr_str):
                    self.res = curr[:]
                return

            temp_q = deque(list(q))
            temp_t = deque(list(t))

            if temp_q:
                c = temp_q.popleft()
                temp_t.append(c)
                dfs(temp_q, temp_t, curr)

            if t:
                c = t.pop()
                dfs(q, t, curr + [c])


        dfs(queue, t_queue, [])

        return ''.join(self.res)

Editorial

class Solution:
    def robotWithString(self, s: str) -> str:
        cnt = Counter(s)
        stack = []
        res = []
        minCharacter = "a"
        for c in s:
            stack.append(c)
            cnt[c] -= 1
            while minCharacter != "z" and cnt[minCharacter] == 0:
                minCharacter = chr(ord(minCharacter) + 1)
            while stack and stack[-1] <= minCharacter:
                res.append(stack.pop())
        return "".join(res)