不同字符的最小子序列

2021-05-20  本文已影响0人  小幸运Q

image.png

choose记录筛选中的字符,pop掉前面在后面有出现而且比当前i更大的元素。

class Solution {
public:
    string smallestSubsequence(string s) {
        if(s==""){
            return "";
        }
        string r="";
        unordered_map<char,int>res,choose;
        for(int i=0;i<s.length();i++){
            if(res.count(s[i])){
                res[s[i]]++;
            }
            else{
                res[s[i]]=1;
            }
        }

        for(int i=0;i<s.length();i++){
            res[s[i]]--;
            if(r.length()){
                if(choose[s[i]]==0){
                    while(r.back()>s[i] && res[r.back()]>0){
                        choose[r.back()]=0;
                        r.pop_back();
                    }
                    r+=s[i];
                    choose[s[i]]=1;
                }
            }
            else{
                choose[s[i]]=1;
                r+=s[i];
            }
        }
        return r;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读