最长公共子串(Longest Common Substring)是一个非常经典的问题,它的基本描述为“给定两个字符串,求出它们之间最长的相同子字符串(要求连续)的长度”。求N个最长为L的字符串的的LCS的方法大致可分为以下几类:1.枚举法显然是简单但极端低效的算法,改进一些的算法是用一个串的每个后缀对其他所有串进行部分匹配,用KMP算法,时间复杂度为O(NL2)。2.动态规划解法:平方的时间算法。3.后缀数组与高度数组解法,利用二分查找技术,时间复杂度为O(NLlogL)。3.广义后缀树方法,时间复杂度为可...
分类:
其他好文 时间:
2014-09-15 21:22:49
阅读次数:
389
HDU 5008 Boring String Problem
题目链接
思路:构造后缀数组,利用height的数组能预处理出每个字典序开始的前缀和有多少个(其实就是为了去除重复串),然后每次二分查找相应位置,然后在往前往后找一下sa[i]最小的
代码:
#include
#include
#include
using namespace std;
typedef l...
分类:
其他好文 时间:
2014-09-15 21:21:09
阅读次数:
271
思路:尼玛,这题搞了一天了,比赛的时候用了n^2的方法绝对T了,然后今天看别人代码看了一天才知道。后面感觉也挺容易的,就是没想到,之前做过SPOJ 694 705求过不同子串了,知道怎么求不同子串个数了,但是比赛的时候这个技巧竟然抛在脑后了,然后就不会了。
但是今天自己用了自己的两个后缀数组的模板(倍增和DC3)的都WA了,搞得自己真想跳楼去了!!
到现在都不知道到底是哪里错了,处理的方法和标...
分类:
其他好文 时间:
2014-09-15 21:19:59
阅读次数:
227
题目链接:hdu 5008 Boring String Problem
题目大意:给定一个字符串,初始状态l,r为0,每次询问子串中字典序第l^r^v+1的子串区间,对于重复的输出下标小的。
解题思路:后缀数组,对给定字符串做后缀数组,然后根据height数组确定每个位置做为起点的子串有多少,然后二分查找确定起点位置,但是因为子串的重复的要输出下表小的,所以确定起点后还要确定字典序最小...
分类:
其他好文 时间:
2014-09-15 19:32:07
阅读次数:
188
因为一看到有关子串就主动的联想后缀数组所有后缀的前缀去重后就是所有子串(好像是废话)这样就可以得到每个后缀的子串个数。二分查找到第k个所在的位置。在二分处理所有可以出现该串的sa区间。最小就是维护sa数组。 1 //rank从0开始 2 //sa从1开始,因为最后一个字符(最小的)排在第0位 ...
分类:
其他好文 时间:
2014-09-15 14:10:49
阅读次数:
202
Boring String Problem
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 219 Accepted Submission(s): 45
Problem Description
In this pro...
分类:
其他好文 时间:
2014-09-14 23:44:07
阅读次数:
447
题目链接思路 想到了,但是木写对啊....代码 各种bug,写的乱死了....输出最靠前的,比较折腾...#include #include #include #include #include #include using namespace std;#define N 501000#define...
分类:
其他好文 时间:
2014-09-14 20:31:07
阅读次数:
233
题目参考:http://blog.csdn.net/xiefubao/article/details/24934617题意:给两个字符串,求一个最短的子串。使得这个子串在两个字符串中出现的次数都等于1.出现的定义为:可以重叠的出现。解法:后缀数组的应用。从小枚举长度。如果一个长度len合法的话:则一...
分类:
其他好文 时间:
2014-09-11 09:35:01
阅读次数:
250
http://blog.csdn.net/ysu108/article/details/7795479求一个字符串中连续出现的次数最多的子串。例如字符串“abababc”,最多连续出现的为ab,连续出现三次。要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab。两...
分类:
其他好文 时间:
2014-09-10 19:08:10
阅读次数:
222
思路: 将4个串每个串都反向这样得到新的四个串一共8个串,对于母串每个位置检测这个串能不能放进去,hs或者后缀数组都可以。然后dp[i][j] (0#include#include#include#include#include#include#include#include#include#inc...
分类:
其他好文 时间:
2014-09-08 10:49:36
阅读次数:
314