'''
解题思路:
1、输出out为最小字典排列的字符串,如新字符已在out中,则直接跳过
2、如新字符si不在out中,但小于out[-1](不是字典序),检查后面是否还有out[-1],如有则删除当前out[-1];
该过程通过while循环一直向前,直到while条件不满足
'''
class Solution:
def removeDuplicateLetters(self, s):
s = list(s)
print('s=',s)
n = len(s)
out = [s[0]]
for i in range(1,n):
si = s[i]
# 1、输出out为最小字典排列的字符串,如新字符已在out中,则直接跳过
if si in out:
continue
# 2、如新字符si不在out中,但小于out[-1](不是字典序),检查后面是否还有out[-1],如有则删除当前out[-1];
# 该过程通过while循环一直向前,直到while条件不满足
while out and si<out[-1] and out[-1] in s[i+1:]:
out.pop()
out.append(si)
print('i=',i,'out=',out)
return ''.join(out)
# s = 'cbacdcbc' # acdb
s = "bcabc" # abc
s = "abacb" # abc
t = Solution().removeDuplicateLetters(s)
print(t)