题目:
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; //判断有没有至少有一个回文串,否则没有回文,返回首字符
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 这样的错误