意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

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

来源:恒创科技 编辑:恒创科技编辑部
2024-02-04 14:38:59


返回最长回文子串的长度

题目描述:

给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。 所谓回文串,指左右对称的字符串。
所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串 (注意:记得加上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;
}


上一篇: 想要优化 K8S 集群管理?Cluster API 帮你忙 | K8S Internals 系列第 5 期 下一篇: 手机怎么远程登录云服务器?