栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最长回文子串(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最长回文子串(C语言)

题目:给你一个字符串s,找到s中最长的回文子串

提示:

1 <= s.length <= 1000;

s仅由数字和字母组成


回文字符串的特点是左右对称,因此可以利用这个特点遍历原字符串。在遍历每个元素时,应当考虑回文子串是奇数串还是偶数串。如果是奇数串,可以将当前元素作为中心,判断它与周围字符能否构成回文字符串;如果是偶数串,可以将两个连续的相同字符作为中心,判断这个中心与周围字符能否构成回文字符串。这里使用target数组记录最长回文字符串的首尾下标。

注意这里有个特殊情况,当字符串的长度小于3时,后面for循环访问数组时会越界。所以这里使用if(s_len<3)的条件处理。

char * longestPalindrome(char * s){
    int i, j=0, k=0, max=0, s_len, target[2]={0};
	s_len = strlen(s);
	if(s_len<3){
		if(s[0]==s[s_len-1]) return s;
		else return s+s_len-1;
	}
	for(i=0;i=0&&i+j+1max){
				max = j*2;
				target[0] = i-(j-1);
				target[1] = i+j; //s+i+1+(j-1)
			}
		}
		if(*(s+i)==*(s+i+2)){   //odd
			j=0;
			while(i-j>=0&&i+j+2max){
				max = j*2 + 1;
				target[0] = i-(j-1);
				target[1] = i+2+(j-1);
			}
		}
	
	}
	s[target[1]+1] = 0;
    return s+target[0];
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号