LeetCode:Longest Palindromic Substring最長(zhǎng)回文字符串

題目:

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:
Input: "babad"
Output: "bab"

Note: "aba" is also a valid answer.
Example:

Input: "cbbd"

Output: "bb"

代碼如下:

#include<stdio.h>
char* longestPalindrome(char* s) {
   char *start=s;
   int b=0;  //判斷有沒(méi)有至少有一個(gè)回文串,否則沒(méi)有回文,返回首字符
   int maxlength=0,i=0,j=1;
   if(*(s+1)=='\0'){//只有一個(gè)字符的時(shí)候
     return s;
   }
   while(*(s+i)!='\0'){
     if(*(s+i)==*(s+i+1)){ //針對(duì)bb這種形式
          b=1;
          while(i-j>=0&&*(s+i-j)==*(s+i+j+1)){
               j++;   //往兩邊拓展的次數(shù)
              }
          if(2*j>maxlength){ //更新最大長(zhǎng)度
            maxlength=2*j;   //bb形式的每次往外拓展一層長(zhǎng)度是2*j
            start=s+i-j+1;   //記錄下最外層的位置,便于返回
          }
        }
        j=1;//記得把j歸為原始的1
      if(*(s+i)==*(s+i+2)){   //aba這種形式
        b=1;       
        while(i-j>=0&&*(s+i-j)==*(s+i+2+j)){
            j++;
          }
          if(2*j+1>maxlength){
            maxlength=2*j+1;//aba形式長(zhǎng)度為2*j+1;
            start=s+i-j+1;
          }
      }
      i++;
      j=1;
   }
   if(b==0){//整個(gè)字符串沒(méi)有回文
    *(start+1)='\0';
    return start;
   }
   *(start+maxlength)='\0';//這里只需要返回start到 
   return start;          //start+length的長(zhǎng)度就可以
   
   
       
}

int main(){
    char c[1001],*p,*q;
    p=c;
    scanf("%s",p);
    q=longestPalindrome(p);
    printf("%s",q);
    
    
} 

Note:如果是回文字符串,總共有兩種形式:bb型,例如 cbbd這種形式;另外一種就是aba型,例如cabad這種形式。

ps: i-j>=0,這個(gè)條件不能少,否則數(shù)組越界啦。我就是少了這個(gè)導(dǎo)致double free or corruption (!prev): 0x00000000021bc290 這樣的錯(cuò)誤

  i++;
  j=1;

}
if(b==0){//整個(gè)字符串沒(méi)有回文
*(start+1)='\0';
return start;
}
*(start+maxlength)='\0';//這里只需要返回start到
return start; //start+length的長(zhǎng)度就可以

}

int main(){
char c[1001],p,q;
p=c;
scanf("%s",p);
q=longestPalindrome(p);
printf("%s",q);

}

### Note:如果是回文字符串,總共有兩種形式:bb型,例如    cbbd這種形式;另外一種就是aba型,例如cabad這種形式。  
#### ps:  i-j>=0,這個(gè)條件不能少,否則數(shù)組越界啦。我就是少了這個(gè)導(dǎo)致double free or corruption (!prev): 0x00000000021bc290 這樣的錯(cuò)誤
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容