【leetcode】5. 最长回文子串

中心点扩展法

首先确定回文串,就是找中心然后想两边扩散看是不是对称的就可以了。

  • 一个元素可以作为中心点;
  • 两个元素也可以作为中心点。
char* longestPalindrome(char* s) {
    int len=strlen(s),i,left,right,start,maxlen=0;
    for(i=0;i<len;i++)
    {
        // 情况1:中心是1个字母
        left=i;
        right=i;
        while(left>=0 && right<len && s[left]==s[right])
        {  
            if(maxlen<right-left+1)
            {
                maxlen=right-left+1;
                start=left;
            }
            left--;
            right++;
        }

        // 情况2:中心是2个字母
        left=i;
        right=i+1;
        while(left>=0 && right<len && s[left]==s[right]) // 首先判断:中心2个字母是否相同
        {
            if(maxlen<right-left+1)
            {
                maxlen=right-left+1;
                start=left;
            }
            left--;
            right++;
        }
    }
    // 在堆区分配内存,防止函数返回时空间被回收,导致字符串返回失败
    char* result = (char*)malloc(maxlen + 1); // +1 for the null terminator  
    if (result == NULL) {  
        // Handle malloc failure  
        return NULL;  
    }  
    strncpy(result, s + start, maxlen);  
    result[maxlen] = '\0'; // Ensure null terminator  
  
    return result;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值