題意:輸入字符串S,得出字符串T。只能進行如下操作:1.從S的頭部刪除一個字符,加到T的尾部。2.從S的尾部刪除一個字符,加到T的尾部。
思路1:比S較開頭和末尾字符串的大小,將較小的加入T的尾部,但此思路在遇到S開頭和末尾相同的情況需要考慮其下一個字符的大小。
例如:S=“ACDBCB”,首先拋出A,其次拋出B,在第三次比較時S="CDBC",開頭和結尾的字符相同,爲了保證T的最小字典序需要觀察S的下一組字符。
思路二:將S反轉得到SS,如果S較小就從S開頭取出,如果SS較小就從SS開頭取出即S的末尾。相同的話則取哪個都行。
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
using namespace std;
int n;
char a[2001],aa[2001],ts[2001];
int main()
{
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
{
scanf("%c",&a[i]);
aa[n-i-1]=a[i];
getchar();
}
int s=0,t=n-1;
for(int i=0;i<n;i++)
{
if(strcmp(a,aa)<0)
{
ts[i]=a[0];
for(int j=1;j<n-i;j++)
a[j-1]=a[j];
}
else
{
ts[i]=aa[0];
for(int j=1;j<n-i;j++)
aa[j-1]=aa[j];
}
putchar(ts[i]);
if((i+1)%80==0)//控制輸出格式
printf("\n");
}
printf("\n");
}