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

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回最长回文子串的长度中心扩散法相关的知识,希望对你有一定的参考价值。

返回最长回文子串的长度

题目描述:

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

以上是关于返回最长回文子串的长度中心扩散法的主要内容,如果未能解决你的问题,请参考以下文章

最长回文子串(M)

最长回文子串

最长回文子串(动规,中心扩散法,Manacher算法)

数据结构与算法 -- 中心扩散法

最长回文子串中心扩散详解

LeetCode5最大回文子串(中心扩散法)