spoj1811LCS
问两个字符串最长公共子串。
做法很简单。匹配成功,则tl++,失败,从父指针回退,tl=t[now].len。
从这题可以清楚了解后缀自动机fa指针的性质:
指向一个状态,这个状态的接受串s[x..x+i]是与当前状态的接受串后缀s[j-i..j]匹配是最长的一个。
这里是不是发现了一个和KMP很像的性质?
KMP在失配时通过next数组回退,那么这...
分类:
其他好文 时间:
2014-08-15 21:11:29
阅读次数:
281
题意:给定一个字符串,求最少添加多少个字符可使得该字符串变为回文字符串
分析:设原序列S的逆序列为S' ,最少需要补充的字母数 = 原序列S的长度 - S和S'的最长公共子串长度
原因:要求最少添加几个字符,我们可以先从原串中找到一个最长回文串,然后对于原串中不属于这个回文串的字符,在它关于回文串中心的对称位置添加一个相同字符即可。那么需要添加的字符数量即为n-最长回文串长度。
最长回文串可以看作是原串中前面和后面字符的一种匹配(每个后面的字符在前面找到一个符合位置要求的与它相同的字符)。这种的回文匹配和原...
分类:
其他好文 时间:
2014-08-15 18:02:39
阅读次数:
223
思路:这题是论文里的最后一道练习题了,不过最后一题竟然挺水的。
因为求的是未反转或者反转后,最长公共子串。
刚开始还真不知道怎么构建连接成一个字符串,因为需要有反转嘛!
但是其实挺简单的,把未反转的和反转后的字符串都连起来,中间用未出现过的字符隔开就行了!然后未反转的和反转的在同一组。
二分枚举最长的公共前缀长度,然后统计看看这个最长的长度在不在所有的组里,如果在就符合……
#inclu...
分类:
其他好文 时间:
2014-08-15 17:55:29
阅读次数:
277
最长公共子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合...
分类:
其他好文 时间:
2014-08-15 00:05:56
阅读次数:
335
思路:其实很简单,就是两个字符串连接起来,中间用个特殊字符隔开,然后用后缀数组求最长公共前缀,然后不同在两个串中,并且最长的就是最长公共子串了。
注意的是:用第一个字符串来判断是不是在同一个字符中,刚开始用了第二个字符的长度来判断WA了2发才发现。
#include
#include
#include
#include
#include
#include
#include
#include
#...
分类:
其他好文 时间:
2014-08-15 00:02:56
阅读次数:
248
56.最长公共字串(算法、字符串)。题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。例如:输入两个字符串...
分类:
其他好文 时间:
2014-08-14 13:25:08
阅读次数:
178
1 //Accepted 4112 KB 16 ms 2 //最长公共子串 3 #include 4 #include 5 #include 6 using namespace std; 7 const int imax_n = 1005; 8 int dp[imax_n][im...
分类:
其他好文 时间:
2014-08-11 20:54:32
阅读次数:
219
http://poj.org/problem?id=2774
想用后缀数组的看这里:http://blog.csdn.net/u011026968/article/details/22801015
本文主要讲下怎么hash去找
开始的时候写的是O(n^2 logn)算法 果断超时。。。虽然也用了二分的,,
代码如下:
//hash+二分
#include
#include
#incl...
分类:
其他好文 时间:
2014-08-10 01:47:49
阅读次数:
337
题意 给你n个DNA串 求它们的长度最大的公共子串 如果有多个 输出字典序最小的 长度小于3的不算
每个DNA串的长度都是60 可以从子串长度为60依次递减 并枚举所有该长度子串 当某个长度的子串也为其它n-1个串的子串时 就是我们要的答案了
判断是否为其它DNA串的子串直接kmp就行了...
分类:
其他好文 时间:
2014-08-09 18:48:08
阅读次数:
302
1 //Accepted 204 KB 891 ms 2 //dp最长公共子串 3 //dp[i][j]=max(dp[i-1][j],dp[i][j-1]) 4 //dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1) (s1[i]==s2[j]) 5 #inc...
分类:
其他好文 时间:
2014-08-09 11:22:47
阅读次数:
189