316. 去除重複字母 棧
阿新 • • 發佈:2020-12-21
給你一個字串 s ,請你去除字串中重複的字母,使得每個字母只出現一次。需保證 返回結果的字典序最小(要求不能打亂其他字元的相對位置)。
注意:該題與 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同
示例 1:
輸入:s = "bcabc"
輸出:"abc"
示例 2:
輸入:s = "cbacdcbc"
輸出:"acdb"
提示:
1 <= s.length <= 104
s 由小寫英文字母組成
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/remove-duplicate-letters
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
class Solution { public: string removeDuplicateLetters(string s) { unordered_map <char, int> cnt; unordered_map <char, bool> vis; for (char ch : s) { cnt[ch]++; } string stk; for (char ch : s) { if (!vis[ch]) { while (!stk.empty() && stk.back() > ch) { if (cnt[stk.back()] > 0) { vis[stk.back()] = false; stk.pop_back(); } else { break; } } vis[ch] = true; stk.push_back(ch); } cnt[ch] -= 1; } return stk; } };