题意:给出两个字符串,求最长公共子串的长度。
题解:首先将两个字符串连在一起,并在中间加一个特殊字符(字串中不存在的)分割,然后两个串的最长公共字串就变成了所有后缀的最长公共前缀。这时就要用到height数组,因为任意两个后缀的公共前缀必定是某些height值中的最小值,而这个值如果最大则一定是height中的最大值。在此题中还要注意height最大一定要在两个值所代表的后缀分属不同的字...
分类:
其他好文 时间:
2014-08-24 10:19:22
阅读次数:
184
Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。 下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总...
分类:
其他好文 时间:
2014-08-22 10:46:36
阅读次数:
213
UVA 12338 - Anti-Rhyme Pairs
题目链接
题意:给定一些字符串,每次询问求出两个字符串的最长公共前缀的长度
思路:把字符串排序,就能求出height和rank数组,然后利用RMQ查询即可
代码:
#include
#include
#include
#include
#include
using namespace std;
co...
分类:
其他好文 时间:
2014-08-20 01:24:35
阅读次数:
300
思路:这题是论文里的最后一道练习题了,不过最后一题竟然挺水的。
因为求的是未反转或者反转后,最长公共子串。
刚开始还真不知道怎么构建连接成一个字符串,因为需要有反转嘛!
但是其实挺简单的,把未反转的和反转后的字符串都连起来,中间用未出现过的字符隔开就行了!然后未反转的和反转的在同一组。
二分枚举最长的公共前缀长度,然后统计看看这个最长的长度在不在所有的组里,如果在就符合……
#inclu...
分类:
其他好文 时间:
2014-08-15 17:55:29
阅读次数:
277
思路:也是n个串连接成一个串,中间用没出现过的字符隔开,然后求后缀数组。
因为是不重叠的,所以和POJ 1743判断一样,只不过这里是多个串,每个串都要判断里面的最长公共前缀有没有重叠,所以用数组存下来就得了,然后再判断。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defi...
分类:
其他好文 时间:
2014-08-15 16:02:09
阅读次数:
194
思路:先把所有的串连接成一个串,串写串之前用没出现过的字符隔开,然后求后缀;对height数组分组二分求得最长的公共前缀,公共前缀所在的串一定要是不同的,不然就不是所有串的公共前缀了,然后记下下标和长度即可。
刚开始理解错题意,然后不知道怎么写,然后看别人题解也不知道怎么意思,后面看了好久才知道题目意思理解错了。
时间四千多ms,别人才一百多ms,不知道别人怎么做的……
#include
#...
分类:
其他好文 时间:
2014-08-15 14:42:29
阅读次数:
277
思路:其实很简单,就是两个字符串连接起来,中间用个特殊字符隔开,然后用后缀数组求最长公共前缀,然后不同在两个串中,并且最长的就是最长公共子串了。
注意的是:用第一个字符串来判断是不是在同一个字符中,刚开始用了第二个字符的长度来判断WA了2发才发现。
#include
#include
#include
#include
#include
#include
#include
#include
#...
分类:
其他好文 时间:
2014-08-15 00:02:56
阅读次数:
248
思路:这题下午搞了然后一直WA,后面就看了Discuss,里面有个数组:ABCDEFDCBA,这个我输出ABCD,所以错了。
然后才知道自己写的后缀数组对这个回文子串有bug,然后就不知道怎么改了。
然后看题解,里面都是用RMQ先预处理任意两个后缀的最长公共前缀,因为不太知道这个,所以又看了一下午,嘛嘛……
然后理解RMQ和后缀一起用的时候才发现其实这里不用RMQ也可以,只要特殊处理一下上面...
分类:
其他好文 时间:
2014-08-13 22:23:47
阅读次数:
261
这题弄了好久,WA了数十发,现在还有个例子没过,可却A了,POJ 的数组也太弱了。
10
1 1 1 1 1 1 1 1 1 1
这组数据如果没有那个n-1
刚开始没明白为什么要判断当前的sa[i]-之前的sa[j]的绝对值>=mid就行,height[i]是rank[sa[i-1])和rank[sa[i])的最长公共前缀呀,为什么和之前的比较呢?
先做后缀数组的其他题,等熟练运用后...
分类:
其他好文 时间:
2014-08-13 13:12:46
阅读次数:
228
1014: [JSOI2008]火星人prefixTime Limit:10 SecMemory Limit:162 MBSubmit:2918Solved:866[Submit][Status]Description火星人最近研究了一种操作:求一个字串两个后缀的公共前缀。比方说,有这样一个字符串:...
分类:
Web程序 时间:
2014-08-06 01:50:00
阅读次数:
317