算法
文章平均质量分 76
hustsselbj
这个作者很懒,什么都没留下…
展开
-
求两个字符串的最长连续公共子串
这个问题和求公共子序列LCS是类似的问题,相比之下,更加简单,因为要考虑连续性。同样的,我们也可以用动态规划法求解,用一个数组C[m+1][n+1],C[i][j]代表字符串的前i个Mi和另一个字符串的前j个Nj的最长连续公共子串的长度。假设两个字符串M[0...m-1]和N[0...n-1]C[i][j] = 0, i=0或者j=0; C[i][j] = C[i-1][j-1原创 2015-08-30 00:16:44 · 977 阅读 · 0 评论 -
最长公共子序列LCS和字符串编辑距离
最长公共子序列问题是求两个字符串中出现的出现的相同的有先后次序的字符集合(可以不连续),连续的公共子序列是公共子串问题。参考 http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2764625.html解决方案是动态规划算法,明白递推公式即可快速写出代码,动态规划算法就是解决子问题重叠的场景,不断利用子问题的最优解,所以一般会用到辅助原创 2015-08-17 11:06:03 · 1663 阅读 · 0 评论 -
字符串匹配——KMP算法
字符串匹配的问题是:在主串中匹配模式串,并返回匹配到模式串的起始位置。 蛮力搜索O(m*n)的时间复杂度,重复匹配步骤太多。KMP算法的核心是发现模式串中的“前缀=后缀”,避免在模式串j位置发生匹配失败时还要回退到0位置开始匹配。 发现“前缀=后缀”,只需要将模式串向前移动合适的位置,跳过了重复匹配前缀的步骤。所以,KMP算法使用了一个next数组来保存模式串中的前缀=后缀的最大的k值,n原创 2015-08-17 17:36:44 · 551 阅读 · 0 评论