题目大意:给定一个字符串,提供下列操作:
1.查询从x开始的后缀和从y开始的后缀的最长公共前缀长度
2.将x位置的字符修改为y
3.在x位置的字符后面插入字符y
看到这题一开始我先懵住了。。。这啥。。我第一时间想到的是后缀数据结构 但是不会写 而且后缀数据结构也不支持修改操作
后来无奈找了题解才知道是Hash+二分。。。 太强大了 Hash+二分打爆一切啊
用Splay维护这个字符串的...
分类:
Web程序 时间:
2014-10-03 14:22:14
阅读次数:
961
思路:枚举第一个字符串的位置,然后枚举最长公共前缀的长度,时间即会下降……
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(...
分类:
其他好文 时间:
2014-09-30 19:14:09
阅读次数:
184
本题是利用后缀数组求最长的回文串。方法是将字符串反转之后拼接到原来的字符串末尾,中间用一个没有出现过的分割符隔开,原因是防止最长公共前缀横跨两个串。之后分别枚举回文串的中点,以及回文串长度是奇数还是偶数,看一下对应位置的最长公共前缀即可。这里的求最长公共前缀要处理RMQ问题,线段树固然可以解决,但是...
分类:
其他好文 时间:
2014-09-26 22:10:08
阅读次数:
142
题记:这道题不难但是很有意思,有两种解题思路,可以说一种是横向扫描,一种是纵向扫描。横向扫描:遍历所有字符串,每次跟当前得出的最长公共前缀串进行对比,不断修正,最后得出最长公共前缀串。纵向扫描:对所有串,从字符串第0位开始比较,全部相等则继续比较第1,2...n位,直到发生不全部相等的情况,则得出最...
分类:
其他好文 时间:
2014-09-22 00:12:11
阅读次数:
267
思路:这题看了题解说是后缀数组做的,然后自己就偿试了一下,唉……没想到不管是不管是倍增算法的后缀还是DC3算法的后缀都T了,实在无计可施了,可能只有哗然可以过了。不过比赛那天题解说是没有卡后缀的。只是比赛那天自己还不会后缀数组,所以这题自己根本就没有看到。因为后缀自己练得还比较少,这题正好用RMQ求任意两个后缀之间的最长公共前缀,所以自己就拿这题练手了,虽然T了,但是倍增的算法和DC3的算法都贴上...
分类:
其他好文 时间:
2014-09-03 22:44:57
阅读次数:
365
题目链接:uva 12338 - Anti-Rhyme Pairs
题目大意:给定若干个字符串,每次询问两个字符串的最长公共前缀。
解题思路:本来应该将每个字符串连接起来做后缀数组,但其实可以直接把一个字符串看成是一个字符,然后排序了就对应是SA数组,然后处理height即可。然后根据后缀数组的性质,字符串i和j的最长公共前缀长度即为rank[i]+1~rank[j]之间height的...
分类:
其他好文 时间:
2014-09-02 22:54:05
阅读次数:
292
题目:
Write a function to find the longest common prefix string amongst an array of strings.
解析:求字符串数组中所有数组的最长公共前缀,重点考察细节和边界条件,比如:
[] :输入字符串数组为空,要判断if (strs .size() == 0) ...
分类:
其他好文 时间:
2014-08-28 17:02:31
阅读次数:
253
题意:给出两个字符串,求最长公共子串的长度。
题解:首先将两个字符串连在一起,并在中间加一个特殊字符(字串中不存在的)分割,然后两个串的最长公共字串就变成了所有后缀的最长公共前缀。这时就要用到height数组,因为任意两个后缀的公共前缀必定是某些height值中的最小值,而这个值如果最大则一定是height中的最大值。在此题中还要注意height最大一定要在两个值所代表的后缀分属不同的字...
分类:
其他好文 时间:
2014-08-24 10:19:22
阅读次数:
184
UVA 12338 - Anti-Rhyme Pairs
题目链接
题意:给定一些字符串,每次询问求出两个字符串的最长公共前缀的长度
思路:把字符串排序,就能求出height和rank数组,然后利用RMQ查询即可
代码:
#include
#include
#include
#include
#include
using namespace std;
co...
分类:
其他好文 时间:
2014-08-20 01:24:35
阅读次数:
300
思路:也是n个串连接成一个串,中间用没出现过的字符隔开,然后求后缀数组。
因为是不重叠的,所以和POJ 1743判断一样,只不过这里是多个串,每个串都要判断里面的最长公共前缀有没有重叠,所以用数组存下来就得了,然后再判断。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defi...
分类:
其他好文 时间:
2014-08-15 16:02:09
阅读次数:
194