leetcode 5 -- Longest Palindromic Substring

本文介绍了一种寻找字符串中最长回文子串的方法,并提供了详细的实现思路与C语言代码。该方法通过遍历字符串,分别针对奇数长度和偶数长度的回文串进行检查,从而找到最长的回文子串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

题意

从字符串中找出最长回文子串,将其另存新串,返回指针

思路

回文串只有两种类型,长度为偶数和长度为奇数型
遍历字符串s:
–奇数型:以s[i]为中心,向两边延伸判断
–偶数型:以s[i]和s[i+1]为起点分别延伸
每次判断完后,记录子串

代码

char* longestPalindrome(char* s) {
    char *a=(char *)malloc(sizeof(char)*1001);//开辟空间
    int i,j,k,max = 0;
    for(i=0;i<strlen(s);i++)
    {
        j=0;
        while(s[i-j] == s[i+j] && i-j>=0 && i+j < strlen(s))//奇数型
        {
            j++;
        }
        if(j*2-1 > max)
        {
            max = j*2 - 1;
            for(k=0;k<j*2-1;k++)
            {
                a[k]=s[k+i-j+1];
            }
            a[k]='\0';
        }
        j=0;
        while(s[i-j] == s[i+j+1] && i-j>=0 && i+j+1<strlen(s))//偶数型
        {
            j++;
        }
        if(j*2 > max)
        {
            max = j*2;
            for(k=0;k<j*2;k++)
            {
                a[k]=s[k+i-j+1];
            }
            a[k]='\0';
        }
    }
    return a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值