manacher(马拉车)算法简单讲解

Manacher算法是一种高效求解字符串中最长回文子串的算法,时间复杂度为O(n)。通过维持一个最右回文字符边界,利用对称性质减少重复计算。对于奇数长度的字符串,可以找到中心位置直接获取回文长度;对于偶数长度的字符串,通过插入特殊字符调整,仅记录回文长度的一半。本文介绍了算法原理及实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍:manacher是一种用来求字符串子串中最长回文长度,时间复杂度可以达到 O ( n ) O(n) O(n)级别。
下面先介绍暴力求解法。
思路
①求出字符串的所有子串,时间复杂度为 O ( n 2 ) O(n^2) O(n2)。设置指针 l e f t , r i g h t left,right leftright,分别表示子串的左右下标,在第一个for循环枚举出所有可能的 l e f t left left,在第二个for循环枚举出在 l e f t left left情况下,所有可能的 r i g h t right right
②判断字符串为回文字符串的方法,时间复杂度为 O ( n ) O(n) O(n)。把字符串翻转,与原来字符比较如果相同即为回文字符串。
源代码

bool IsPalindromes(string s,int,int);
void FindSubstring(string s)
{
   
	int left,right,maxn=1;
	for(left=1;left<s.length();left++)
	{
   
		for(right=left+1;right<s.length();right++)
		{
   
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值