贪心,同样是用数组存储位置
#include <iostream>
#include <string>
using namespace::std;
using std::cout;
using std::cin;
int main()
{
string s;
cin >> s;
int cnt[26] = {0};
for (char c : s)
{
cnt[c-'a']++;
}
bool vis[26] = {false};
string ans = "";
for (char c : s)
{
cnt[c-'a']--;
if (vis[c-'a'])
{
continue;
}
while (!ans.empty() && ans.back() > c && cnt[ans.back()-'a'] > 0)
{
vis[ans.back()-'a'] = false;
ans.pop_back();
}
ans += c;
vis[c-'a'] = true;
}
std::cout << ans;
return 0;
}