美文网首页
C语言编程 C Language Programming - 0

C语言编程 C Language Programming - 0

作者: Articraft | 来源:发表于2018-12-10 12:33 被阅读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

相关文章

网友评论

      本文标题:C语言编程 C Language Programming - 0

      本文链接:https://www.haomeiwen.com/subject/vkjrhqtx.html