1class Solution:2def smallestSubsequence(self, s: str) -> str:3# calculate the last occurence of each characters in s4last_occurence = {c: i for i, c in enumerate(s)}56stack = []7# check if element is in stack8instack = set()9for i, c in enumerate(s):10if c not in instack:11# check if stack already have char larger then current char12# and if char in stack will occur later again, remove that from stack13while stack and stack[-1] > c and last_occurence[stack[-1]] > i:14instack.remove(stack[-1])15stack.pop()1617instack.add(c)18stack.append(c)1920return "".join(stack)