最长回文子串
2015-12-23 20:54
281 查看
[b]问题描述[/b]
给定一个字符串,求它的最长回文子串的长度。
回文串就是正着读和反着读都一样的字符串。
Manacher算法
给定一个字符串,求它的最长回文子串的长度。
回文串就是正着读和反着读都一样的字符串。
分析与求解
解法一 蛮力法
最容易想到的就是蛮力求解,即求出该字符串的每一个子串,再判断子串是否是回文串,找到最长的那个。其中求出每个子串的时间复杂度为O(n2),判断是否为回文串的复杂度为O(n),两者是相乘关系,所以整个算法的时间复杂度为O(n3)。int p[100]; void init(const char *str, char *tmp) { tmp[0] = '@'; int len = strlen(str); for (int i = 1; i < 2 * len; i += 2) { tmp[i] = '#'; tmp[i + 1] = str[i / 2]; } tmp[2 * len + 1] = '#'; tmp[2 * len + 2] = '@'; tmp[2 * len + 3] = 0; } //Manacher算法计算过程 int longestPalindrome(const char *str) { int mx = 0, ans = 0, id = 0; int len = strlen(str); int longest = 0; for (int i = 1; i <= len; i++) { if (mx >= i) p[i] = min(p[2 * id - i], mx - i); else p[i] = 1; while (str[i + p[i]] == str[i - p[i]]) p[i]++; if (p[i] + i > mx) { mx = p[i] + i; id = i; } longest = max(longest, p[id]); } return longest - 1; }
Manacher算法
相关文章推荐
- QQ ,微博,一键分享的步骤,详细到没朋友
- splay 模板
- 每天学习十分钟1之心路历程
- <1>Lua 环境搭建与语法基础
- 选项卡TabHost、TabWidget和FrameLayout
- 获取和设置select和checkbox的值
- ARM开发板如何挂载NFS开发环境的方法步骤
- 使用Maven管理Spring
- 内存管理
- input框自动填充内容背景颜色为黄色解决方法
- VS2012+OpenGL环境配置(win7)
- 自架http下载ipa注意事的几点
- poj 1007 dna逆序数
- ajax向后台传值
- 1086: [SCOI2005]王室联邦
- chrome跨域访问
- 使用fitness进行自动化测试
- STM32F103ZET6 之 ADC 采样率的确定
- 再谈协方差矩阵之主成分分析
- 关于图片放大和取得尺寸