题意就是说每次都可以从字符串的首部或者尾部提取字母,使得最后的字符串的字典序最小。
按照字典序比较S和将S反转后的字符串S’
如果S比较小,就从S的开头取出一个字母,追加到T的末尾。反之,则从S开头取出一个字母,加到末尾。
代码如下:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int n;
char x[2010];
cin >> n;
for(int i = 0;i < n; i++)
{
getchar();
scanf("%c",&x[i]);
}
int a = 0,b = n - 1,index = 0;
while(a <= b)
{
int left = 0;
for(int i = 0;a + i <= b; i++)
{
if(x[a + i] < x[b - i])
{
left = 1;
break;
}
else if(x[a + i] > x[b - i])
{
left = 0;
break;
}
}
if(left)
{
putchar(x[a++]);
index++;
}
else
{
putchar(x[b--]);
index++;
}
if(index == 80)
{
putchar('\n');
index = 0;
}
}
return 0;
}