1081. Smallest Subsequence of Distinct Characters

我只能说贪心算法不好找呀,有时候总会有些问题,还找不出问题的解法,那就是说明你的贪心算法有问题,换个思路想想。

class Solution {
public:
    
    bool judge(int i, vector<vector<int>>& cnt, int& min){
        int flag = 0;
        vector<int> indexes = cnt[i];
        for(int i=0;i<indexes.size(); i++){
            if (indexes[i]>=min){
                min = indexes[i];
                flag = 1;
                break;
            }
        }
        if (flag == 0){
            return false;
        }
        
        // min <= all cnt max
        for(int i=0;i<26;i++){
            vector<int> temp = cnt[i];
            if ((temp.size()>0)&&(min<=temp[temp.size()-1])){
                continue;
            }
            else if (temp.size()==0){
                continue;
            }
            else{
                return false;
            }
        }
        return true;
    }
    
    
    string smallestSubsequence(string text) {
        vector<int> temp;
        vector<vector<int>> cnt(26, temp);
        for (int i=0;i<text.size();i++){
            cnt[int(text[i]-'a')].push_back(i);
        }
        
       
        string res="";
        int min = 0;
        
        while(1){
            //cout<<res<<endl;
            for (int i=0;i<26;i++){
                if (cnt[i].size()>0){
                    int tempmin = min;
                    if (judge(i, cnt, tempmin)){
                        char ch = 'a' + i;
                        res += ch;
                        cnt[i].clear();
                        min = tempmin;
                        break;
                    }
                }
            }
            int flag = 0;
            for (int i=0;i<26;i++){
                if (cnt[i].size()>0){
                    flag = 1;
                    break;
                }
            }
            if (flag==0){
                break;
            }
        }
        
        return res;
    }
};
发布了361 篇原创文章 · 获赞 18 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/zeroQiaoba/article/details/104555423