最长对称子串
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:Is PAT&TAP symmetric?输出样例:
11
这个题我开始用了动态规划的方法来做的,就是把求最大公共子序列的代码做了下变形,一个字符串是原字符串,另一个是将原字符串倒过来,求最大公共子序列的长度,但其实这样写还是有问题的,字串和子序列的概念是不一样的
下面就来说说求最长对称字串应该怎么做吧
我找了一篇讲的比较详细的博客最长对称子串解法
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
char a[1005];
int i,j,len;
int maxn=0,temp;
gets(a);
len=strlen(a);
for(i=0;i<len;i++)
{
//对称字符串的个数为奇数
temp=1;
for(j=1;j<len;j++)
{
if(i-j<0||i+j>=len||a[i-j]!=a[i+j])
break;
temp+=2;
}
maxn=temp>maxn?temp:maxn;
//对称字符串的个数为偶数
temp=0;
for(j=1;j<len;j++)
{
if(i-j+1<0||i+j>=len||a[i-j+1]!=a[i+j])
break;
temp+=2;
}
maxn=temp>maxn?temp:maxn;
}
cout<<maxn<<endl;
return 0;
}