NYOJ 308-Substring【模拟】,nyoj308-substring
NYOJ 308-Substring【模拟】,nyoj308-substring
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;
}
相关文章
- 暂无相关文章
用户点评