最长回文子串的找法(c语言)

链接:https://ac.nowcoder.com/acm/problem/14517
来源:牛客网

回文串

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32768K,其他语言65536K

64bit IO Format: %lld

题目描述

 既然大家都知道回文串是怎么回事了,那我们就长话短说,现在有一个字符串,长度小于1200,我想知道最长的回文子串长度是多少。  

输入描述:
多组输入,输入字符串只包含小写字母。
输出描述:
每组输出一个数字,表示最长的回文子串。

示例1

输入
复制

aqppqole
ebcml

输出
复制

4
1

#include <stdio.h>
#include <string.h>
int main()
{
    char w[1210];
    int i,len,max,j,k,x,y;
    while(scanf("%s",w)!=EOF)
    {
        int a[1210]={1},b[1210]={0};//a全部为一 表示回文串至少为1 b全部置0
        len=strlen(w);//得到字符串长度
        for(i=0;i<len;i++)//找奇数回文子串
        {
            j=i-1;//子串是回文的话至少长度为三
            k=i+1;
            while(j>=0 && k<len && w[j]==w[k])//先找到最小的是回文的串 再判断更多的
            {
                                a[i]=k-j+1;
                j--;//找有五位时是否还为回文字符串
                k++;
            }
        }

首先咱们开始分析奇数子串,在定义的时候我们选择给a数组全部赋值为1,因为子串至少为一,方便后面输出,b数组是找偶数子串的,后面会有解释,如果我们要找更大的奇数子串,至少子串长度就是3了,让j=i-1,k=i+1可以达到最小长度,当然我们找的时候j至少就要大于等于0了,k当然要小于字符串长度,当w[j]==w[k]时,我们知道这是一个子串,用a记录其长度,让j–,k++,再判断长度为5时是不是还是回文串即可,偶数的略有不同,看代码就明白;

#include <stdio.h>
#include <string.h>
int main()
{
    char w[1210];
    int i,len,max,j,k,x,y;
    while(scanf("%s",w)!=EOF)
    {
        int a[1210]={1},b[1210]={0};//a全部为一 表示回文串至少为1 b全部置0
        len=strlen(w);//得到字符串长度
        for(i=0;i<len;i++)//找奇数回文子串
        {
            j=i-1;//子串是回文的话至少长度为三
            k=i+1;
            while(j>=0 && k<len && w[j]==w[k])//先找到最小的是回文的串 再判断更多的
            {
                    x=j;
                    y=k;
                    a[i]=k-j+1;
                j--;//找有五位时是否还为回文字符串
                k++;
            }
        }
        for(i=0;i<len;i++)//偶数回文找法
        {
            j=i;
            k=i+1;
            while(j>=0 && k<len && w[j]==w[k])
            {
                    b[i]=k-j+1;
                j--;//先看中间是不是回文 再看两边
                k++;
            }
        }
        max=1;
        for(i=0;i<len;i++)
        {
            if(max<a[i])
                max=a[i];
            if(max<b[i])
                max=b[i];
        }
        printf("%d\n",max);
    }
}
发布了1 篇原创文章 · 获赞 3 · 访问量 98

猜你喜欢

转载自blog.csdn.net/qq_45744615/article/details/103969720