1081. Smallest Subsequence of Distinct Characters
class Solution {
public:
string removeDuplicateLetters(string s) {
vector<int> remain_cnt(26, 0);
for(auto ch : s) remain_cnt[ch - 'a']++;
vector<char> stack(s.size());
int top = -1;
for(auto ch : s) {
if(find(stack.begin(), stack.begin()+top+1, ch) == stack.begin()+top+1) {
while(top != -1 && stack[top] > ch && remain_cnt[stack[top] - 'a']) top--;
stack[++top] = ch;
}
remain_cnt[ch - 'a']--;
}
string ans = "";
for(int ii = 0; ii <= top; ii++) ans += stack[ii];
return ans;
}
};