题解 | #最长回文子串#

最长回文子串

https://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507

//将字符串分两类,奇数长度和偶数长度,再对两种类型分别从中间向两端遍历,找最长回文串
#include <stdio.h>
#include<string.h>
int main()
{
    char arr[350];
    scanf("%s", arr);
    int sz = strlen(arr);
    int mid = sz / 2, i = 1, num = 0, count = 0;
  //偶数型
    for (i = 1; i <= mid+1; i++)
    {
        if ((arr[mid - i + 1] == arr[mid + i])&&((mid+i)<sz))
        {
            count+=2;
		  //记录最大的num
            num = num > count ? num : count;
        }
        else
        {
		  //往左移
            mid--;
            i = 0;
            count = 0;
        }
    }
    count = 0;
    mid = sz / 2;
  //偶数型
    for (i = 1; i <= mid+1; i++)
    {
        if ((arr[mid - i + 1] == arr[mid + i])&&((mid+i)<sz))
        {
            count+=2;
            num = num > count ? num : count;
        }
        else
        {
		  //防止越界
            if(mid<sz-1)
            {
			  //往右移
                mid++;
            }
            else
            {
                break;
            }
            i = 0;
            count = 0;
        }
    }
    count = 1;
    mid = sz / 2;
  //奇数型
    for (i = 1; i <= mid; i++)
    {
        if (arr[mid - i] == arr[mid + i])
        {
            count += 2;
            num = num > count ? num : count;
        }
        else
        {
		  //往左移
            mid--;
            i = 0;
            count = 1;
        }
    }
    count = 1;
    mid = sz / 2;
    for (i = 1; i <= mid; i++)
    {
        if (arr[mid - i] == arr[mid + i])
        {
            count += 2;
            num = num > count ? num : count;
        }
        else
        {
		  //防止越界
            if(mid<sz-1)
            
			  //往右移
                mid++;
            }
            else
            {
                break;            
            }
            i = 0;
            count = 1;
        }
    }
    printf("%d\n", num);
    return 0;
}

全部评论

相关推荐

喜欢疯狂星期四的猫头鹰在研究求职打法:短作业优先
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务