您的位置:首页 > 其它

L2-008. 最长对称子串

2018-03-17 23:42 288 查看
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:
Is PAT&TAP symmetric?
输出样例:
11

一切尽在代码中啊,说一下错误的地方吧
1.两种四处边界问题要处理好2.不要忽略只有一个字符的时候
3.分奇偶数做

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main ()
{
char s[1005];
gets(s);
int l=strlen(s);
int a,b,ans,max=1;  //注意max=1,当一个字符时,ans=0,但是正确答案是1
for (int i=1;i<l-1;i++)  //边界问题,i=0时会出现a[-1],i=l-1时会出现a[l]
{
a=i-1,b=i+1;ans=1;  //相当于字符串个数为奇数,加上最中间的那个
while (s[a]==s[b]&&a>=0&&b<l)  //还是要注意边界问题
{
a--;b++;ans+=2;  //左右各加一个
}
if (ans>max) max=ans;
}
for (int i=0;i<l-1;i++)
{
a=i;b=i+1;ans=0;
while (s[a]==s[b]&&a>=0&&b<l)
{
a--;b++;ans+=2;
}
if (ans>max) max=ans;   //此处的max是上面的max(max,ans)
}
cout<<max<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: