面试题 最长回文子串

原创 2016年08月30日 14:45:12

求最长回文子串


方法:中心法,回文最重要的是确定中心。

start即是中心,left和right就是回文的左右边界。

若start右边有重复字母,让right一直延长到无重复,start直接从那边开始

然后就是回文判断。

这样大约是O(n)


 string longestPalindrome(string s) 
 {
	int i,n,start,left,right,max_len;
	string ans_s;
	n=s.length();
	if(n<2)
		return s;
	start=0;  //中心最开始为0
	max_len=0;   //最长子串长度为0

	while(start<n && n-start>max_len/2 )  //若剩余长度小于max_len/2,那么肯定不会再有结果,因为他们都是中心!
	{
		left=right=start;
		while(right+1<n&&s[right+1]==s[start])  //右方延伸到无重复地带
			right++;
		
		start=right+1;//下次检索中心跳过重复字母,从那个地方开始

		while(left-1>=0&&right+1<n)    //若left-1和right+1都在范围内
			if(s[left-1]==s[right+1])   //判断是否相等,相等则再向两边延伸,否则退出
			{
				left--;
				right++;
			}
			else break;

		if(right-left+1>max_len)  //判断长度
		{
			max_len=right-left+1;
			ans_s=s.substr(left,right-left+1);
		}
	}
	return ans_s;
 }


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串

(一)题目 问题:求给定字符串s的回文(palindrome)子串中,长度最大的回文子串的长度。 回文(palindrome)是指从左往右读和从右往左读字符串,看到的字符串都是一样的。比如...

最长回文子串-Manacher算法

题目来源:程序员代码面试指南 主要是Manacher算法的使用,具体请参考程序员代码面试指南P483,有很详细的介绍。 题目,来自牛客网: 对于一个字符串,请设计一个高效算法,计算其中最...

最长回文子串(百度笔试题和hdu 3068)

版权所有。所有权利保留。 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/17123559 求一个字符串的最长回文...

【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】

【005-Longest Palindromic Substring(最长回文子串)】给定一个字符串S,找出它的最大的回文子串,你可以假设字符串的最大长度是1000,而且存在唯一的最长回文子串。动态规...

【面试题之算法部分】最长回文子串

暴力法:枚举中心位置 int LongestPalindrome(const char *s, int n) { if(s == NULL || n < 1) return -1; i...

【面试题】最长回文子串

在网上找了几个版本,改编的,好难啊。加油。   //最大回文子串问题 #include #include using namespace std; //返回最长的回文子串 char *Max_S...

C++/C求最长回文子串

面试题5:求字符串中回文子串的最大长度

题目来源:华为机试题(密码截取)密码截取描述: Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结...

最长回文子串c语言

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)