您的位置:首页 > 其它

NYOJ 308-Substring【模拟】

2016-04-09 10:01 232 查看


Substring

时间限制:1000 ms | 内存限制:65535 KB

难度:1

描述

You are given a string input. You are to find the longest substring of input such that the reversal of the substring is also a substring of input. In case of a tie, return the string that occurs earliest in input.

Note well: The substring and its reversal may overlap partially or completely. The entire original string is itself a valid substring . The best we can do is find a one character substring, so we implement the tie-breaker rule of taking the earliest one first.

输入The first line of input gives a single integer, 1 ≤ N ≤ 10, the number of test cases. Then follow, for each test case, a line containing between 1 and 50 characters, inclusive. Each character of input will be an uppercase
letter ('A'-'Z').
输出Output for each test case the longest substring of input such that the reversal of the substring is also a substring of input
样例输入
3
ABCABA
XYZ
XCVCX


样例输出
ABA
X
XCVCX


ac代码

#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
char map[1000];
char map1[1000];
char ans[1000];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int i,j,k;
scanf("%s",map);
int len=strlen(map);
for(i=0;i<len;i++)
{
map1[i]=map[len-1-i];
}
map1[i]='\0';
int hh=1;
int ansx=0,ansy=0;
for(i=0;i<len;i++)
{
for(j=i;j<len;j++)
{
memset(ans,'\0',sizeof(ans));
int jj=0;
for(k=i;k<=j;k++,jj++)
{
ans[jj]=map1[k];
}
if(strstr(map,ans)!=NULL)
{
if((j-i+1)>=hh)
{
hh=j-i+1;
ansx=len-i-1,ansy=len-j-1;
}
}
}
}
for(i=ansy;i<=ansx;i++)
printf("%c",map[i]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: