0
点赞
收藏
分享

微信扫一扫

【返回最长回文子串的长度】中心扩散法


返回最长回文子串的长度

题目描述:

给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。 所谓回文串,指左右对称的字符串。
所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串 (注意:记得加上while处理多个测试用例)

输入描述:

输入一个仅包含小写字母的字符串

输出描述:

返回最长回文子串的长度

示例1

输入:

cdabbacc

输出:

4

说明:
abba为最长的回文子串
测试:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(char *a,int left,int right){
while(a[left] == a[right] && left>=0 && right<strlen(a)){
left--;
right++;
}
return right-left-1;
}
int main() {
char a[] = {"cdabbacc"};
int i=0,m=0;
for(i=0;i<strlen(a);i++){
int len_1 = fun(a,i,i);
int len_2 = fun(a,i,i+1);
int len = len_1>len_2 ? len_1 : len_2;
m = m>len?m:len;
}
printf("%d",m);
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun(char *a,int left,int right){
while(a[left] == a[right] && left>=0 && right<strlen(a)){
left--;
right++;
}
return right-left-1;
}
int main() {
char a[1000] = {"cdabbacc"};
int i=0;
while(gets(a)){
int m=0;
for(i=0;i<strlen(a);i++){
int len_1 = fun(a,i,i);
int len_2 = fun(a,i,i+1);
int len = len_1>len_2 ? len_1 : len_2;
m = m>len?m:len;
}
printf("%d",m);
}

return 0;
}


举报

相关推荐

0 条评论