力扣316.去除重复字母
-
从左到右遍历每个字母
- 若当前字母比栈顶字母小 并且右边仍然后栈顶字母出现
- 弹出栈顶字母 最后加入当前字母
-
class Solution { public: string removeDuplicateLetters(string s) { //记录每个字母出现次数;当前字符串中字母是否出现 vector<int> left(26),in_ans(26); for(char c:s) left[c - 'a'] ++; string ans; for(char c:s) { left[c - 'a'] --; if(in_ans[c - 'a']) continue; while(!ans.empty() && c < ans.back() && left[ans.back() - 'a']) { in_ans[ans.back() - 'a'] = false; ans.pop_back(); } ans += c; in_ans[c - 'a'] = true; } return ans; } };