【返回最长回文子串的长度】中心扩散法
题目描述:
给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。 所谓回文串,指左右对称的字符串。
所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串 (注意:记得加上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;
}
版权声明
本文仅代表作者观点,不代表博信信息网立场。