动态规划的核心是找到解题路径中的重复子问题,避免重复计算。 找出问题间的递归关系,用问题解决问题需要培养归纳的思维。 问题定义的好坏直接影响到可以定位出的重叠子问题的多少,可以找出的重叠子问题越多,问题定义越好。 下面是两种问题的定义,效率差距非常大。 解法1,超时: public final in ...
分类:
其他好文 时间:
2020-07-28 14:16:21
阅读次数:
73
1. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb"动态规划1、当 i 和 j 的差距等于小于 ...
分类:
其他好文 时间:
2020-07-21 14:24:39
阅读次数:
91
题目链接 #解题思路 马拉车当然是求最长回文既简单又快速的方法,不过这里因为要联系hash就没用马拉车了。设回文串的中心为a,b(奇回文a=b)先正着hash一遍,再倒着hash一遍,就能得到[a+len,a]和颠倒后的[b,b+len]两个子串哈希值,对比它们的哈希值就能判断两个子串是否相等,至于 ...
简述 Manacher算法,又称马拉车算法,它是用于求一个字符串的最长回文子串长度的算法,时间和空间复杂度为O(n)。 算法思想 求一个字符串的最长回文子串长度,我们如果用暴力来做,我们就要取出这个串的所有子串,然后判断这个子串是不是回文串,复杂度是n方的。 那么马拉车为何如此神奇能做到O(n)呢? ...
分类:
编程语言 时间:
2020-07-17 22:10:08
阅读次数:
116
题目描述 输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变。如"abc"和"xyz"可以被组合成"axbycz"或"abxcyz"等。 我们定义字符串的价值为其最长回文子串的长度(回文串表示从正反两边看完全一致的字符串,如"aba"和"xyyx")。 需要求出所有可能的C中价 ...
分类:
其他好文 时间:
2020-07-15 01:21:32
阅读次数:
53
详细讲解可以看这个 下面只是些模板 纯模板 int manacher() { // 将数组初始化 init(); int p[N*2],ans=0,mx=0,max_len=-1,id=0,index; // p[i]代表以i为中心的回文串半径,p[i]-1是以i为中心的最长回文串(相对于原字符串) ...
分类:
其他好文 时间:
2020-06-28 22:45:32
阅读次数:
63
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"来源:力扣(LeetCode)链接:https://leetcode-cn.c ...
分类:
其他好文 时间:
2020-06-27 11:39:29
阅读次数:
67
传统方法:遍历每一个字符,以该字符为中点向两边查找。 问题1: 由于回文串长度的奇偶性,需要对对称轴的位置进行分别判断,这种解法的时间复杂度是O(n^2)。 如aabb对称轴为ab之间,而ababa对称轴为中间的a 需要分别对两种情况进行判断 问题2:子串被重复多次访问,降低了时间效率。 Manac ...
分类:
其他好文 时间:
2020-06-24 15:50:57
阅读次数:
51
问题定义: 设计高效算法,求给定输入字符串的最长回文子序列。例如,给定输入character,算法应该返回carac。算法的运行时间是怎样的? 可以将问题中的回文看作前后缀匹配的问题,因此这个问题属于特殊的前缀动态规划的问题 1. 如何用子问题表示 dp[ i ][ j ]表示A[ i…j ]的最长 ...
分类:
其他好文 时间:
2020-06-20 13:47:23
阅读次数:
44
模板 求以每个位置结尾的回文串的数量,加密输入 就是回文自动机节点的$len$数组,对应的是最长回文后缀 双倍回文 求形如$AArAAr$ 方法一:建立$fail$树,然后对每个$len$是偶数的点,在子树内找有没有长度为$2*len$的点,通过打标记做到$O(n)$ 方法二:求一个与$fail$数 ...
分类:
其他好文 时间:
2020-06-12 12:26:51
阅读次数:
45