1. 程式人生 > 其它 >去除重複字母

去除重複字母

題目連結: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;
    }
};