`

manacher算法

阅读更多

const int LEN=110005;
const int N=LEN*2;
int p[N];
char str[LEN], tmp[N];
//p[i]表示以str[i]为中心的回文往右延伸的 最长长度
void manacher(char* str, int* p){
	int n=strlen(str), i, id, mx;
	for(p[mx=id=0]=i=1; i<n; i++){
		p[i]=mx>i?min(p[2*id-i], mx-i+1):1;
		while(i+p[i]<n&&i-p[i]>=0&&str[i+p[i]]==str[i-p[i]]) p[i]++;
		if(mx<i+p[i]-1){
			id=i;
			mx=i+p[i]-1;
		}
	}
}
//求str的最长回文的长度
int maxPalindrome(char* str){
	int ans=0;
	int i, n;
	for(i=0, n=strlen(str); i<n; i++){
		tmp[2*i]='#';
		tmp[2*i+1]=str[i];
	}
	tmp[2*i]='#';
	tmp[2*i+1]='\0';
	n=n*2+1;
	manacher(tmp, p);
	for(i=0; i<n; i++){
		if(ans < p[i]-1){
			ans = p[i]-1;
		}
	}
	return ans;
}
 
0
1
分享到:
评论

相关推荐

    查找一个字符串中的最长回文子串,这里采用的是Manacher算法

    查找一个字符串中的最长回文子串,这里采用的是Manacher算法 比如:cababcaac的最长回文子串就是caac 其中的aba bab也都是回文子串 (Manacher算法) 效率很高的一种查找算法,效率可以达到O(2n+1)

    求回文子串_O(n)_manacher算法

    ### Manacher算法详解:求解回文子串的利器 #### 回文串与回文子串的概念 在计算机科学领域,特别是在字符串处理问题中,回文串是一个重要的概念。回文串指的是一个正序读和倒序读都相同的字符串,如"madam"、...

    字符串处理- 回文串相关- Manacher 算法.rar

    Manacher算法是解决回文串问题的一种高效方法,由Manacher在1975年提出,主要针对找出给定字符串中最长回文子串的问题。这个算法的核心在于利用了回文串的对称性,通过动态规划和预处理技巧,避免了重复计算,大大...

    算法训练营【5】Manacher算法及其扩展(csdn)————程序.pdf

    Manacher算法是一种用于求解字符串中最长回文子串的高效算法,由Edmund L. Manacher在1975年提出。该算法利用了回文串的对称性,将时间复杂度降低到了O(N),其中N是字符串的长度。在传统的暴力解法中,我们需要以每...

    字符串算法(KMP算法和Manacher算法)的矢量图.pptx

    文章 https://blog.csdn.net/ncepu_Chen/article/details/88866664 中的矢量图 文章 https://blog.csdn.net/ncepu_Chen/article/details/88866664 中的矢量图 文章 ...

    4.2.3 使用Manacher算法求最长回文子串.pdf

    ### 使用Manacher算法求最长回文子串 #### 概述 在计算机科学领域,寻找一个给定字符串中的最长回文子串是一个经典的算法问题。回文是指一个字符串正读和反读都一样的序列,例如“abcba”。解决这个问题的传统方法...

    Manacher算法:求解最长回文字符串,时间复杂度为O(N)

    Manacher算法:求解最长回文字符串,时间复杂度为O(N) 回文串定义:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。

    最长回文子串Manacher算法1

    Manacher's Algorithm是一种用于在O(n)时间复杂度内找到字符串中最长回文子串的高效算法。这个算法的核心思想是通过巧妙地预处理字符串并利用回文串的对称性来减少重复计算,从而达到线性时间复杂度。 首先,我们...

    算法讲解104【扩展】 Manacher算法相关题目.pptx

    代码:https://download.csdn.net/download/m0_73085893/89681787

    算法讲解103【扩展】 Manacher算法、扩展KMP.pptx

    代码:https://download.csdn.net/download/m0_73085893/89681787

    C#,求最长回文字符串的马拉车(Manacher)算法的源代码

    求解字符串的回文子串...Manacher算法的核心思路就是利用之前求得的臂长( 即之前求出的Len值) 来减少时间复杂度,也就是说通过前面求出的Len值来加速求出当前下标i的 Len[i],快速求出所有的Len 值就是该算法的目的。

    【ACM比赛模板积累ing】O(n)回文子串(Manacher)算法

    ACM比赛模板积累,Manacher算法,时间复杂度O(n),可适应于求输入串的最长回文子串

    BAT算法面试指南(下)1

    【描述】:"目录经典算法Manacher算法原始问题进阶问题BFPRT算法morris遍历二叉树遍历规则先序、中序序列后序序列时间复杂度分析求和为aim的最长子数组长度" 在算法面试中,掌握基础和进阶算法是至关重要的。本篇...

    C语言工作面试热题

    Manacher算法在代码中被实现为一个函数,其中rad数组存储每个字符的回文半径,str数组是将原字符串转换为Manacher格式的字符串(在每个字符之间和字符串的两端插入特殊字符)。核心思想是在遍历原始字符串的过程中,...

    字符串处理- 单模式匹配- MP 算法与 KMP 算法.rar

    2. 并行匹配:Manacher算法使用两个指针P和R,P指向当前匹配的中心,R记录当前能匹配的最大半径。在匹配过程中,可以同时尝试向两边扩展。 3. 利用回文结构:如果新位置的左侧有已匹配的回文子串,那么可以利用这个...

    算法模版(转)

    此外,字符串处理算法如KMP算法、Manacher算法等也非常实用,能够帮助解决复杂的字符串匹配问题。 ### 四、总结 综上所述,ACM算法模版覆盖了计算机科学中的许多关键领域,对于参加ACM竞赛的选手来说至关重要。...

    中国海洋大学算法分析与设计历年试卷(含大部分答案)+历年作业.zip

    8. **字符串处理**:KMP算法、Rabin-Karp模式匹配算法、Manacher算法等,用于处理字符串匹配问题。 9. **算法效率分析**:时间复杂度和空间复杂度的计算,了解O、Ω、θ符号的含义,掌握如何估算算法运行时间和空间...

    回文子串问题1

    该问题可以采用多种方法解决,其中最常见的是动态规划(Dynamic Programming, DP)和Manacher算法。以下分别介绍这两种方法: 1. **动态规划法**: 动态规划是一种有效解决此类问题的策略。我们可以创建一个二维...

    python数据结构与算法-已转档.pdf

    14. 高级字符串处理:包括字符串匹配、Manacher算法解析、HTML标签匹配等。 15. 树与二叉树:二叉树的遍历(包括递归和非递归)、树结构的创建和操作等。 以上知识点构成了这份文档的教学大纲,面向对Python编程有...

Global site tag (gtag.js) - Google Analytics