导言 最近软件安全课上,讲病毒特征码的提取时,老师讲了一下GST算法。 这里就做个小总结。 正文 广义后缀树的英文为Generalized Suffix Tree,简称GST。 GST算法的提出是为了解决最大公共子串问题,也就是在多个字符串中,找到他们共有的子串。这个问题听起来和最大公共子序列问题( ...
分类:
编程语言 时间:
2016-09-29 20:16:37
阅读次数:
454
这题曾经用sam打过,现在学sa再来做一遍。 基本思路:计算A所有的后缀和B所有后缀之间的最长公共前缀。 分组之后,假设现在是做B的后缀。前面的串能和当前的B后缀产生的公共前缀必定是从前往后单调递增的,每次与h[i]取min时必定将栈尾一些长的全部取出来,搞成一个短的。 所以就开一个栈,栈里存的是长 ...
分类:
编程语言 时间:
2016-09-28 22:03:44
阅读次数:
227
[http://poj.org/problem?id=2774] (题目链接) 第一次用后缀数组,感觉有点神。。。才发现原来sa[0]是没用的。。 题意:给出两个只包含小写字母的字符串,求出最长连续公共子串。 solution 将两个字符串合并为一个,并用分隔符隔开。之后跑后缀数组,求出height ...
分类:
其他好文 时间:
2016-09-28 16:03:16
阅读次数:
213
题意:求n个串的最长公共子串,子串出现在一个串中可以是它的反转串出现。总长<=10^4. 题解: 对于每个串,把反转串也连进去。二分长度,分组,判断每个组。 这一题我曾经用kmp暴力水过。。贴一下代码 ...
分类:
编程语言 时间:
2016-09-26 14:44:43
阅读次数:
179
题意: 求所有串的最长公共子串,若有多个输出字典序最小的 分析: 对第一个串的每一个后缀分别与剩下的所有串进行匹配,求得公共子串 对每一个公共子串,记录下最大值即可. ...
分类:
其他好文 时间:
2016-09-16 22:48:07
阅读次数:
141
找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。 代码如下: 返回博客列表 转 动态规划算法之:最长公共子序列 & 最长公共子串(LCS) xrzs 发布时间: 2013/03/25 01:30 阅读: 29656 收藏: 24 点赞: 6 评论: 2 ...
分类:
其他好文 时间:
2016-09-14 10:51:41
阅读次数:
166
最近工作中需要写一个算法,而写完这个算法我却发现了一个很有意思的事情。需要的这个算法是这样的:对于A,B两个字符串,找出最多K个公共子串,使得这K个子串长度和最大。一开始想了一些乱七八糟的想法。 错误想法1:比如每次找最长公共子串,找到一个子串后,从A,B两个字符串中删除这个子串,之后在剩下的串中再 ...
分类:
其他好文 时间:
2016-09-11 18:52:17
阅读次数:
148
在“文本比较算法Ⅰ——LD算法”中介绍了基于编辑距离的文本比较算法——LD算法。 本文介绍基于最长公共子串的文本比较算法——Needleman/Wunsch算法。 还是以实例说明:字符串A=kitten,字符串B=sitting 那他们的最长公共子串为ittn(注:最长公共子串不需要连续出现,但一定 ...
分类:
编程语言 时间:
2016-09-11 12:52:06
阅读次数:
633
LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题。引入: LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题。 比如: String str1 = new String("adbccadebbca"); ...
分类:
其他好文 时间:
2016-09-08 19:54:15
阅读次数:
149
题目链接:http://poj.org/problem?id=3415 题意:给定2个串[A串和B串],求两个串公共子串长度大于等于k的个数。 思路:首先是两个字符串的问题。所以想用一个'#'把两个字符串拼接起来。求后缀数组。 然后按照k把height数组分组。大于等于k的为一组,然后就是统计每组的 ...
分类:
编程语言 时间:
2016-09-04 14:32:15
阅读次数:
220