我只能说贪心算法不好找呀,有时候总会有些问题,还找不出问题的解法,那就是说明你的贪心算法有问题,换个思路想想。
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;
}
};