ACM中一些很妙的题
给定长度为N的字符串S,要构造一个长度为N的字符串T。T初始是空字符串。S由大写字母构成。
构造过程通过反复进行以下任意操作:
从S的头部删除一个字符,添加到T的尾部
从S的尾部删除一个字符,添加到T的尾部
请你构造出字典序尽可能小的字符串T(字典序是指首先比较第一个字符,如果不同则第一个字符
较小的字符串更小,如果相同则比较第二个字符,以此类推)
构造过程通过反复进行以下任意操作:
从S的头部删除一个字符,添加到T的尾部
从S的尾部删除一个字符,添加到T的尾部
请你构造出字典序尽可能小的字符串T(字典序是指首先比较第一个字符,如果不同则第一个字符
较小的字符串更小,如果相同则比较第二个字符,以此类推)
#include <iostream>
using
namespace
std;
int
main(){
int
N;
string S, T;//构造两个字符串
cin>>N>>S;
int
L=0, R=N-1;
while
(L<=R)
{
int
i=0;
while
(S[L+i]==S[R-i]) i++;
T+=S[L+i]<S[R-i]?S[L++]:S[R--];
}
cout<<T;
}