1. 程式人生 > >***Leetcode 316. Remove Duplicate Letters

***Leetcode 316. Remove Duplicate Letters

不是很容易想。

如果來了一個新的字母 就考慮放在哪個位置合適,之前已經選的字母 如果後面還有,就可以暫時刪除。

class Solution {
public:
    string removeDuplicateLetters(string s) {
        int visit[256] = {0};
        int mem[256] = {0};
        string ret = "0";
        for (auto c : s) mem[c] ++;
        for (auto c : s) {
            mem[c]--;
            if (visit[c])continue;
            while (c < ret.back() && mem[ret.back()] ) {
                visit[ret.back()] = 0;
                ret.pop_back();
            }
            visit[c] = 1;
            ret += c;
        }
        return ret.substr(1);
    }
};