还以为能用单调栈做出来,,想了老半天,最后发现模拟一下很好做的
按顺序把字符压栈即可
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
char s[maxn];
stack<
int>
stk;
int vis[
30];
int main(){
scanf("%s",s);
int len=
strlen(s);
for(
int i=
0;i<len;i++)vis[s[i]-
'a']++
;
for(
int i=
0;i<len;i++
){
stk.push(s[i]-
'a');
vis[s[i]-
'a']--
;
int flag=
0;
while(!
stk.empty()){
int tmp=
stk.top();
for(
int i=
0;i<tmp;i++)
if(vis[i])flag=
1;
if(flag)
break;
putchar(tmp+
'a');
stk.pop();
}
}
}
转载于:https://www.cnblogs.com/zsben991126/p/10226768.html