给定长度为N的字符串S,要构造一个长度为N的字符串T。T初始是空字符串。S由大写字母构成。
构造过程通过反复进行以下任意操作:
从S的头部删除一个字符,添加到T的尾部
从S的尾部删除一个字符,添加到T的尾部
请你构造出字典序尽可能小的字符串T(字典序是指首先比较第一个字符,如果不同则第一个字符
较小的字符串更小,如果相同则比较第二个字符,以此类推)
第一行一个整数N,表示字符串的长度(1<=n<=2000) 第二行输入一个长度为N的字符串S输出描述:
输出构造出的尽可能小的字符串T
示例1
输入6 ACDBCB输出
ABCBCD
题目解析:
题解:
先比较左右两端两个字符的字典序谁更小,更小的先放;如果相等,两指针都移动一位,继续比较,直到找到有大小关系的或找到尽头,最后把符合条件的放进去;其中a,b这两个变量在里面充当的角色是非常重要的,下面是我的代码。
#include
using namespace std;
int N;
char a[2010];
int main()
{
int i,l,e;
bool flag;
cin>>N;
for(i=0; i
l=0,e=N-1;
while(l<=e)
{
flag=false;
for(i=0; l+i<=e; i++)
{
if(a[l+i] {
flag=true;
break;
}
else if(a[l+i]>a[e-i])
{
flag=false;
break;
}
}
if(flag)
cout< else
cout< }
cout<
}



