左神算法进阶班1_4Manacher算法 朴灿烈づ我的快乐病毒、 2022-01-06 00:01 165阅读 0赞 1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 //使用manacher算法寻找字符中最长的回文子串 7 8 int Manacher(string str) 9 { 10 //字符串预处理 11 string newStr = "#"; 12 for (auto c : str) 13 newStr = newStr + c + "#"; 14 //回文半径记录数组 15 int* rIndex = new int[newStr.length()]; 16 int c = -1;//回文中心 17 int R = -1;//回文右边界 R位于回文对称右边界的右边一个字母 18 int maxL = INT_MIN;//记录最长回文字长 19 for (int i = 0; i < newStr.length(); ++i) 20 { 21 //第一步直接取得可能的最短的回文半径,当i>R时,最短的回文半径是1, 22 //反之,最短的回文半径可能是i对应的i'的回文半径或者i到R的距离 23 if (R > i) 24 rIndex[i] = rIndex[2 * c - i] < R - i ? rIndex[2 * c - i] : R - i; 25 else 26 rIndex[i] = 1; 27 //取最小值后开始从边界暴力匹配,匹配失败就直接退出 28 while (i + rIndex[i] < newStr.length() && i - rIndex[i] > -1) 29 { 30 if (newStr[i + rIndex[i]] == newStr[i - rIndex[i]])//向两边扩展,找回文字母 31 rIndex[i]++; 32 else 33 break; 34 } 35 //观察此时R和C是否能够更新 36 if (i + rIndex[i] > R) 37 { 38 R = i + rIndex[i]; 39 c = i; 40 } 41 //更新最大回文半径的值 42 maxL = maxL > rIndex[i] ? maxL : rIndex[i]; 43 } 44 delete[] rIndex; 45 //这里解释一下为什么返回值是maxn-1,因为manacherstring的长度和原字符串不同, 46 //所以这里得到的最大回文半径其实是原字符串的最大回文子串长度加1, 47 //有兴趣的可以自己验证试试,-1是为了将后面的‘#’去掉 48 return maxL - 1; 49 50 } 51 52 void Test() 53 { 54 string str = "abc1234321ab"; 55 cout << Manacher(str) << endl; 56 } 转载于:https://www.cnblogs.com/zzw1024/p/11031706.html
相关 python算法口诀_左神算法初级4 python实现 初级4的题目相关代码: 1、转圈打印矩阵 \转圈打印矩阵(二维数组), 比如a矩阵 \ \[\[ 1 2 3\] \ \[ 4 5 6\] \ \[ 7 8 9\] 桃扇骨/ 2022年11月05日 13:51/ 0 赞/ 92 阅读
相关 左神算法进阶班3_4网易题——烽火传递 【题目】 一个数组中的数字组成环形山,数值为山高 1 2 4 5 3 规则,烽火传递: 相邻之间的两座山必能看到烽火, 非相邻的山之间有一边的山高都 <= Bertha 。/ 2022年10月02日 15:55/ 0 赞/ 118 阅读
相关 左神算法进阶班3_1构造数组的MaxTree 题目 一个数组的MaxTree定义: 数组必须没有重复元素 MaxTree是一棵二叉树,数组的每一个值对应一个二叉树节点 包括MaxTree树在内且在 缺乏、安全感/ 2022年10月02日 15:55/ 0 赞/ 93 阅读
相关 左神算法:加强堆的实现(Java) 为什么要有加强堆? Java中的PriorityQueue(优先级队列)就是系统提供的堆实现,那么为什么还要手动去实现? 假如现在你手里有一个堆,里面存着一些元素,用户 小鱼儿/ 2022年09月06日 00:18/ 0 赞/ 132 阅读
相关 【搞定左神算法初级班】第7节:暴力递归、动态规划 目 录: 一、递归 题目1:求 n! 的结果 题目2:汉诺塔问题 题目3:打印一个字符串的全部子序列,包括空字符串 题目4:打印一个字符串的全部排列 题目5:母 冷不防/ 2022年04月23日 15:20/ 0 赞/ 244 阅读
相关 【搞定左神算法初级班】第6节:前缀树、贪心算法 目 录: 一、前缀树:Prefix Tree 1.1 前缀树题目举例:一个字符串类型的数组 arr1,另一个字符串类型的数组 arr2 1.2 前缀树的 insert 以你之姓@/ 2022年02月26日 13:20/ 0 赞/ 187 阅读
相关 左神算法进阶班1_4Manacher算法 1 include <iostream> 2 include <string> 3 4 using namespace std; 朴灿烈づ我的快乐病毒、/ 2022年01月06日 00:01/ 0 赞/ 166 阅读
相关 左神算法进阶班3_2求最大矩阵 【题目】 给定一个整型矩阵map,其中的值只有0和1两种,求其中全是1 的所有矩形区域中,最大的矩形区域为1的数量。 例如: 1 1 1 0 逃离我推掉我的手/ 2022年01月05日 23:55/ 0 赞/ 133 阅读
相关 JAVA进阶14 间歇性混吃等死,持续性踌躇满志系列-------------第14天 1、线程的加入 ![ContractedBlock.gif][] ![ExpandedBlockSta 淡淡的烟草味﹌/ 2021年12月20日 01:21/ 0 赞/ 264 阅读
还没有评论,来说两句吧...