题目大意:
给定长度为N的字符串S,要构造一个长度为N的字符串T。构造方法为:
.从S头部删除一个字符,加到T的尾部
.从S尾部删除一个字符,加到T的尾部
解题思路:
是一道贪心的水题,但也有值得学习的地方。编程技巧上,使用的方法比较独特,每次都要搜索一次,时间复杂度会高一点,但这道题怎么写肯定都不会超时,所以下面这种写法简单逻辑清晰。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s[3000];
int N,st,ed;
void solve()
{
st=0;ed=N-1;
while(st<=ed)
{
bool l=false;
for(int i=0;st+i<=ed;i++)
{
if(s[st+i]<s[ed-i])
{
l=true;
break;
}
else if(s[st+i]>s[ed-i])
{
l=false;
break;
}
}
if(l) printf("%c",s[st++]);
else printf("%c",s[ed--]);
}
printf("\n");
}
int main()
{
//freopen("t.txt","r",stdin);
while(scanf("%d",&N)!=EOF)
{
for(int i=0;i<N;i++)
{
getchar();
scanf("%c",&s[i]);
}
solve();
}
return 0;
}