可以将t串用一个栈模拟,因为t串里的字符是从s串转移到t串的尾部而来,然后u串的字符又是由t串的尾部转移来,所以t串具有后进先出的性质,然后再贪心处理一下,因为要求u串字典序最小,所以当栈顶元素比s串里的所有元素都小时才出栈,否则不出栈。
#include<bits/stdc++.h>
using namespace std;
int cnt[150];
char str[100000+10];
stack<char>s;
int main()
{
int len;
memset(cnt,0,sizeof(cnt));
while(!s.empty()) s.pop();
cin>>(str+1);
len=strlen(str+1);
for(int i=1;i<=len;i++)
cnt[str[i]]++;
for(int i=1;i<=len;i++)
{
int flag;
s.push(str[i]);
cnt[str[i]]--;
while(!s.empty())
{
flag=1;
for(int j=s.top()-1;j>='a';j--)
if(cnt[j]>=1)
{
flag=0;
break;
}
if(!flag) break;
cout<<s.top();
s.pop();
}
}
cout<<endl;
return 0;
}