L2-008. 最长对称子串
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:Is PAT&TAP symmetric?输出样例:
11
| 4月26日 16:45 | 答案正确 | 25 | L2-008 | C (gcc 4.7.2) | 2 | 264 | 小明 |
#include<string.h>
#include<string.h>
char s[1005];
int maxlen(int l);
int main()
{
int l;
gets(s);
l=strlen(s);
printf("%d\n",maxlen(l));
}
int maxlen(int l)
{
int i,j;
int left,right;
int max=1,ans;//默认不对称时的对称子串的长度为1
for(i=0;i<l-1;i++)//先判断字符串有可能是偶数的情况
{
ans=0;
left=i;
right=i+1;
while(s[left]==s[right]&&left>=0&&right<l)
{
left--;
right++;
ans+=2;
}
if(ans>max)//每次比较完一次之后,更新最长的子串
max=ans;
}
for(i=0;i<l-1;i++)//按照奇数的情况处理,注意边界情况
{
ans=1;
left=i-1;
right=i+1;
while(s[left]==s[right]&&left>=0&&right<l)
{
left--;
right++;
ans+=2;
}
if(ans>max)
max=ans;
}
return max;
}
测试点
| 测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
|---|---|---|---|---|
| 0 | 答案正确 | 1 | 264 | 13/13 |
| 1 | 答案正确 | 1 | 264 | 2/2 |
| 2 | 答案正确 | 1 | 264 | 2/2 |
| 3 | 答案正确 | 2 | 264 | 2/2 |
| 4 | 答案正确 | 1 | 256 | 2/2 |
| 5 | 答案正确 | 1 | 264 | 2/2 |
| 6 | 答案正确 | 1 | 260 | 2/2 |

本文介绍了一种求解最长对称子串的算法实现,通过两个循环分别处理奇数和偶数长度的对称子串情况,最终输出最长对称子串的长度。该算法适用于字符串处理相关的竞赛题目。
1321

被折叠的 条评论
为什么被折叠?



