题解:P13189 [GCJ 2016 #1A] The Last Word
题目大意:
一个由大写英文字母组成的字符串
思路:
由于题目要求要从两端进行插入操作,所以我们可以用双端队列——deque。(deque讲解)整个字符串搜一遍,并且每次进行比较,并插入。也就是说时间复杂度只有
代码:
#include<bits/stdc++.h>
using namespace std;
string s;
deque<char> q;
int main(){
int T;
scanf("%d",&T);
for(int i=1;i<=T;i++){
cin>>s;
int len=s.length();
for(int j=0;j<len;j++){
if(q.empty()){ // 队列空无法比较,直接加入。
q.push_back(s[j]);
}
else{
if(q.front()<=s[j]){ // 注意 ≤ 和字典序。
q.push_front(s[j]);
}
else{
q.push_back(s[j]);
}
}
}
printf("Case #%d: ",i);
while(!q.empty()){
char p=q.front();
printf("%c",p);
q.pop_front();
}
printf("\n");
}
return 0;
}