2020-12-20 去除重复字母

题目

题解

使用了贪心和栈的思想,对实现思路没有理得太清,LeeteCode官方题解

class Solution {
public:
    string removeDuplicateLetters(string s) {
        vector<int> vis(26), num(26);
        for (char ch : s) {
            num[ch - 'a']++;
        }

        string stk;
        for (char ch : s) {
            if (!vis[ch - 'a']) {
                while (!stk.empty() && stk.back() > ch) {
                    if (num[stk.back() - 'a'] > 0) {
                        vis[stk.back() - 'a'] = 0;
                        stk.pop_back();
                    } else {
                        break;
                    }
                }
                vis[ch - 'a'] = 1;
                stk.push_back(ch);
            }
            num[ch - 'a'] -= 1;
        }
        return stk;
    }
};
posted @ 2020-12-20 20:44  刷书狂魔  阅读(73)  评论(0编辑  收藏  举报
总访问: counter for blog 次