思路:维护一个单调栈,同时维护字符是否出现过和字符的剩余个数
链接:https://ac.nowcoder.com/acm/contest/551/D
//
#include <bits/stdc++.h>
int vis[300];
using namespace std;
int main(){
string s,res;
cin >> s;
unordered_map<int,int>cnt;
for(auto c:s) cnt[c]++;
for(int i=0;i<s.size();i++){
cnt[s[i]]--;//处理当前只剩下这一个元素的情况
if(!vis[s[i]]){
while(res.size() && cnt[res.back()] && s[i] < res.back()){
vis[res.back()] = 0;
res.pop_back();
}
res.push_back(s[i]);
vis[s[i]] = 1;
}
}
cout << res << endl;
return 0;
} 
京公网安备 11010502036488号