随笔分类 -  { 字符串 { 后缀数组 } }

摘要:题目大概说给一个字符串,将所有不同子串从小到大排序,多次询问,每次询问输出第k个子串是哪个子串。 阅读全文
posted @ 2016-09-11 22:19 WABoss 阅读(235) 评论(0) 推荐(0) 编辑
摘要:题目大概说给一个字符串,求出现至少m的子串的最长长度以及出现在最右边的位置。 阅读全文
posted @ 2016-09-01 16:06 WABoss 阅读(234) 评论(0) 推荐(0) 编辑
摘要:题目大概说给若干的字符串pi,然后若干个询问,询问pi内有多少个不同子串与给定的询问字符串的strange set相同。一个字符串的strange set是一个二元组(i,j)的集合,表示该字符串在pi中出现且最后一个字符在pi中的位置j。 阅读全文
posted @ 2016-08-16 23:52 WABoss 阅读(414) 评论(0) 推荐(0) 编辑
摘要:题目大概说给一个字符串问有几个不同且包含给定某个字符子串。 如果不考虑子串一定要包含给定的字符,那样容易想到用后缀数组解决(好像写过这种题。。)。。因为每个子串都是某个后缀的前缀。 求出的后缀有序排列后,考虑各个后缀能贡献几个前缀,这个就是各个后缀有几个前缀满足不和前面统计过的后缀的前缀相同,其实这 阅读全文
posted @ 2016-07-29 20:08 WABoss 阅读(224) 评论(0) 推荐(0) 编辑
摘要:题意:给一个串,串的第一个字符比后面的都大,要把它分成三段,然后反转每一段,求能得到的字典序最小的串是什么。 首先,第一段是可以确定的:把原串反转,因为第一个字符是最大的,它是唯一的,不存在反转串的后缀之间有包含关系,所以取最小的后缀这就是第一段的字符串; 然后后面两段,如果确定分割位置可以发现这两 阅读全文
posted @ 2016-03-04 20:50 WABoss 阅读(325) 评论(0) 推荐(0) 编辑
摘要:题意:给n个字符串,求最长的子串,满足它或它的逆置出现在所有的n个字符串中。 把n个字符串及其它们的逆置拼接,中间用不同字符隔开,并记录suffix(i)是属于哪个字符串的; 跑后缀数组计算height; 二分答案,height分组,看组里面是否都包含了n个字符串的后缀; 注意n=1的情况。。 1 阅读全文
posted @ 2016-02-28 16:34 WABoss 阅读(239) 评论(0) 推荐(2) 编辑
摘要:给n个字符串,求最长的多于n/2个字符串的公共子串。 依然是二分判定+height分组。 把这n个字符串连接,中间用不同字符隔开,跑后缀数组计算出height; 二分要求的子串长度,判断是否满足:height分组,统计一个组不同的字符串个数是否大于n/2; 最后输出方案,根据二分得出的子串长度的结果 阅读全文
posted @ 2016-02-27 19:03 WABoss 阅读(320) 评论(0) 推荐(0) 编辑
摘要:求两个字符串的最长公共子串。 拼接两个字符串中间用特殊字符隔开,max(height[i])(2<=i<=len,suffix(sa[i])与suffix(sa[i-1])分别属于两个字符串的后缀)就是答案! 1 #include<cstdio> 2 #include<cstring> 3 #inc 阅读全文
posted @ 2016-02-22 20:52 WABoss 阅读(189) 评论(0) 推荐(0) 编辑
摘要:求一个串的最大回文字串。 可以用后缀数组解决。 分别考虑奇数和偶数回文子串的情况,枚举原串S的每个位置i作为中间位置看其能向左右两边同时拓展都哪儿:把原串S反转成S',拼接SaS'(a为一个特殊字符),最远拓展的地方便可以通过LCP(suffix[i],suffix[i'])求得,i'为i对应在S‘ 阅读全文
posted @ 2016-02-21 10:40 WABoss 阅读(189) 评论(0) 推荐(0) 编辑
摘要:给一个字符串求有多少个不相同子串。 每一个子串一定都是某一个后缀的前缀。由此可以推断出总共有(1+n)*n/2个子串,那么下面的任务就是找这些子串中重复的子串。 在后缀数组中后缀都是排完序的,从sa[1]到sa[n],这么思考以某个串为前缀的子串有几个,那么容易想到重复子串的个数其实就是∑heigh 阅读全文
posted @ 2016-02-20 16:16 WABoss 阅读(236) 评论(0) 推荐(0) 编辑
摘要:题目求最长的重复k次可重叠子串。 与POJ1743同理。 二分枚举ans判定是否成立 height分组,如果大于等于ans的组里的个数大于等于k-1,这个ans就可行 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 usi 阅读全文
posted @ 2016-02-19 15:38 WABoss 阅读(225) 评论(0) 推荐(0) 编辑
摘要:题目大概是给n个数组成的串,求是否有多个“相似”且不重叠的子串的长度大于等于5,两个子串相似当且仅当长度相等且每一位的数字差都相等。 这题是传说中楼教主男人八题之一,虽然已经是用后缀数组解决不可重叠最长重复子串的经典题了。。但其实没那么简单,题目数据不强,网上一些代码都是不正确的。 首先把问题转化成 阅读全文
posted @ 2016-02-18 20:44 WABoss 阅读(3252) 评论(0) 推荐(13) 编辑