LeetCode:Longest Palindromic Substring最长回文字符串

题目:

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
char* longestPalindrome(char* s) {
   char *start=s;
   int b=0;  //判断有没有至少有一个回文串,否则没有回文,返回首字符
   int maxlength=0,i=0,j=1;
   if(*(s+1)=='\0'){//只有一个字符的时候
     return s;
   }
   while(*(s+i)!='\0'){
     if(*(s+i)==*(s+i+1)){ //针对bb这种形式
          b=1;
          while(i-j>=0&&*(s+i-j)==*(s+i+j+1)){
               j++;   //往两边拓展的次数
              }
          if(2*j>maxlength){ //更新最大长度
            maxlength=2*j;   //bb形式的每次往外拓展一层长度是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形式长度为2*j+1;
            start=s+i-j+1;
          }
      }
      i++;
      j=1;
   }
   if(b==0){//整个字符串没有回文
    *(start+1)='\0';
    return start;
   }
   *(start+maxlength)='\0';//这里只需要返回start到 
   return start;          //start+length的长度就可以
   
   
       
}

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,这个条件不能少,否则数组越界啦。我就是少了这个导致double free or corruption (!prev): 0x00000000021bc290 这样的错误

  i++;
  j=1;

}
if(b==0){//整个字符串没有回文
*(start+1)='\0';
return start;
}
*(start+maxlength)='\0';//这里只需要返回start到
return start; //start+length的长度就可以

}

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,这个条件不能少,否则数组越界啦。我就是少了这个导致double free or corruption (!prev): 0x00000000021bc290 这样的错误

你可能感兴趣的:(LeetCode:Longest Palindromic Substring最长回文字符串)