只需要把两个串拼接起来,之后求一下后缀数组求可覆盖最长重复子串模板即可 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> using namespace std; ty ...
分类:
编程语言 时间:
2020-07-15 01:12:09
阅读次数:
72
A substring of a string T is defined as: T(i, k)=TiTi+1...Ti+k-1, 1≤i≤i+k-1≤|T|. Given two strings A, B and one integer K, we define S, a set of tripl ...
分类:
编程语言 时间:
2020-07-11 13:09:02
阅读次数:
71
//查找 function find(str,hasSortArr,callback) { let l=0,r=hasSortArr.length; let index=-1; if(hasSortArr.length>0){ const ri=callback(str,hasSortArr[r-1 ...
分类:
编程语言 时间:
2020-07-05 15:51:04
阅读次数:
62
定义 \(sa[i]\) 表示第 \(i\) 小的后缀对应原串的位置 \(rk[i]\) 表示第 \(i\) 个后缀的排名 \(x[i]\) 表示第 \(i\) 个后缀的第一关键字排名,即当前的 \(rk[i]\) \(y[i]\) 表示第 \(i\) 小的第二关键字对应的第几个后缀 \(c[i]\ ...
分类:
编程语言 时间:
2020-07-05 13:16:53
阅读次数:
58
这题的rotate操作其实就是暗示可以把某一个数提到最前面 因此本题其实就是求取最长公共子序列 但是有个问题当转移遇到s[i]==t[j]的时候,不能直接转移,因为只有当他二十六个字母的后缀数组全部比t串大时才可以转移,否则如果匹配了当前两个 没有办法把后面的提上来变成相等 #include<bit ...
分类:
其他好文 时间:
2020-07-04 01:49:10
阅读次数:
82
对于一个长度为 len 字符串 S ,将其 len 个后缀根据字典序排序得到的排名数组即为后缀数组。 ...
分类:
编程语言 时间:
2020-06-30 12:51:44
阅读次数:
111
后缀数组的倍增算法 O(nlogn) / O(nlog2n) 算法介绍 ? 先根据字符串中字符的出现情况,给每一种字符一个对应的排名(从1开始),作为第一次排序的结果 ? 其后每一次,每个位置以当前排名作为主关键词,从1开始倍增步数,将对应的位置排名作为第二关键词 ? 于是根据主关键词与副关键词继续 ...
分类:
编程语言 时间:
2020-06-30 12:33:39
阅读次数:
56
用倍增法求后缀数组、名次数组 sa为后缀数组、rank为名次数组 //二分查找法,返回最接近的位置和实际位置 function binary_find(id,hasSortArr){ let l=0,r=hasSortArr.length; let index=-1; while(r-l>0){ c ...
分类:
编程语言 时间:
2020-06-26 16:39:28
阅读次数:
53
后缀数组 对于给定的字符串$s$,构建两个数组$sa$和$rk$,其中$rk[i]$表示$s[i,n]$在$s$的所有后缀中的字典序排名,$sa[i]$则表示排名$i$的后缀的最左端位置。容易发现有$sa[rk[i]]=rk[sa[i]]=i$。 构造 - 倍增法 一般来说,我们用倍增法$O(n\l ...
分类:
编程语言 时间:
2020-06-19 21:10:49
阅读次数:
59
" Power Strings " 题意 给出一个字符串s,求s最多由几个相同的字符串重复而成(最小循环节的重复次数) 思路 之前学习KMP的时候做过。 我的思路是:枚举字符串的长度,对于当前长度k,判断$lcp(1,k+1) =k$,$lcp(k+1,2k+1) =k$,$lcp(3k+1,4k+ ...
分类:
编程语言 时间:
2020-05-12 20:37:08
阅读次数:
70