- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
- C语言编程 C Language Programming - 0
编程题0006 (from Programming Teaching Assistant (PTA))
最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度。
例如,给定Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11
。
输入格式:
输入在一行中给出长度不超过1000
的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
思路:
对于一个字符串我们从中间向两端去扩展并判断是否对称,分为两种情况:
1.如果对称子串是奇数,就以该字符为轴向两边扩展 找到一个对称的就+2最后更新最大值
2.如果对称子串是偶数,那么就以两个字符为轴向两边扩展,找到对称+2 并更新最大值
Answer:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[1001];
gets(s);
int len=strlen(s);
int max=1,ans=0;
int x,y;
for(int i=0;i<len-1;i++)
{
ans=0;
x=i;
y=i+1;
while(s[x]==s[y]&&x>=0&&y<len)
{
x--;
y++;
ans+=2;
}
if(ans>max) max=ans;
}
for(int i=1;i<len-1;i++)
{
ans=1;
x=i-1;
y=i+1;
while(s[x]==s[y]&&x>=0&&y<len)
{
x--;
y++;
ans+=2;
}
if(ans>max) max=ans;
}
printf("%d\n",max);
return 0;
}
Reference:
[1] https://blog.csdn.net/howardemily/article/details/61616082
网友评论