力扣打怪记004

力扣打怪记004

题目相关
字符串
回文解法之中心扩展

题目链接

https://leetcode-cn.com/leetbook/read/array-and-string/conm7/

题目描述
给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
示例 3:
输入:s = “a”
输出:“a”

心得:
1.看大佬的解法主要有:暴力,中心扩展,动态规划,这里在大佬基础上改了一些。
2.count的使用太精华了。
3.重新申请了一个字符数组,strncpy复制粘贴
好处是防止主函数的传入的是char* s=“baac”,
这种存储空间在文字常量区(全局),函数内无法修改数组的情况。

char *longestPalindrome(char *s)
{
    if (strlen(s) == 0 || strlen(s) == 1)
        return s;
    int i, count , left, right,start=0,len=0;
    for (i = 0; i < strlen(s); i += count)
    {
        left = i-1;
        right = i+1;
        count=1;//count就是来代替i+1
        while (s[right] != '\0' && s[i] == s[right])
        {
            count++;//如果下一个相同就要判断让i多跳一,修改了记得归1
            right++;
        }
        while (left >= 0 && s[right] != '\0' && s[left] == s[right])
        {
            left--;
            right++;
            
        }
        if(len<right-left-1)
        {
        	start=left+1;
        	len=right-start;
        }
    }
    char* cpy=(char*)malloc(sizeof(char)*(len+1));
    strncpy(cpy,s+start,len);
    cpy[len]='\0';//记得字符串一定要有'\0'
    return cpy;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值