5. 最长回文子串

该代码实现了一个寻找给定字符串中最长回文子串的函数,通过比较以每个字符为中心的回文串长度,找到最大值并返回对应的回文串。
摘要由CSDN通过智能技术生成

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

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"


int tobig(int n,int m){
    if(n>m){
        return n;
    }
    return m;
}
int finds(char *s,int left,int right){
    while(left>=0&&right<strlen(s)&&s[left]==s[right]){
        left--;
        right++;
    }
    return right-left-1;
}
char * longestPalindrome(char * s){
  int len=strlen(s);
  if(len<1){ return "";}
  int start=0,end=0,max=0;
  for(int i=0;i<len;i++){
    int len1=finds(s,i,i);
    int len2=finds(s,i,i+1);
    int lenmax=tobig(len1,len2);
    if(lenmax>end-start){
        end=i+lenmax/2;
        start=i-(lenmax-1)/2;
        max=lenmax;
    }
  }
  char *c=(char *)malloc(sizeof(char)*(max+1));
  strncpy(c,s+start,max);
  c[max]='\0';
  
  return  c; 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值