去除重複字母
阿新 • • 發佈:2021-07-17
題目連結:https://leetcode-cn.com/problems/remove-duplicate-letters/
題目描述:
題解:
1.遍歷字串,記錄字元出現次數。
2.定義標記陣列,記錄字元是否重複出現過。
3.為了確保返回結果的字典序最小,使用單調棧。
class Solution { public: string removeDuplicateLetters(string s) { unordered_map<char, int> map; vector<int> visit(26, 0); //標記陣列 for(char ch: s) { map[ch]++; } string result; //定義單調棧 for(char ch: s) { if(visit[ch - 'a'] == 0) //字元未出現過 { while(!result.empty() && result.back() > ch) //若新字元小於棧頂字元,且棧頂字元之後存在重複,則替換當前值為新字元,否則不變化 { if(map[result.back()] > 0) { visit[result.back() - 'a'] = 0; result.pop_back(); }else { break; } } result.push_back(ch); visit[ch - 'a'] = 1; } map[ch] -= 1; } return result; } };