题意
给你一个由'a'到'z'的字符数组,求出一个不包含重复字符的 但是全部字符都要存在的 字典序最小的字符串
如 'bcaabc' 答案'abc'
题解
count记录当前字符x的出现次数
用一个栈来存结果
如果当前字符没在栈出现过,且当前字符小于栈顶的元素,且栈顶的元素 后面还出现,那么我们就pop,然后让当前字符加到栈中
class Solution {
public:
string removeDuplicateLetters(string s) {
int len = s.size();
if(len <= 1) return s;
int count[26] = {0};
for (auto x : s) {
count[x - 'a'] ++;
}
bool vis[26] = {0};
string ans;
for(int i=0; i<len; i++) {
count[s[i] - 'a']--;
if(vis[s[i] - 'a'])
continue;
while(!ans.empty() && s[i] < ans.back() && count[ans.back() - 'a'] > 0) {
vis[ans.back() - 'a'] = false;
ans.pop_back();
}
ans += s[i];
vis[s[i] - 'a'] = true;
}
return ans;
}
};