随笔分类 - 字符串 - 后缀数组
摘要:计算两个字符串$s$和$t$的最长公共子串 由于在一个字符串中出现两次的最长子串一定在相邻两个后缀数组元素的最长公共前缀中取得,也就是高度数组的最大值,所以通过插入一个在两个字符串中不可能出现的字符,将两个字符串连接起来,计算后缀数组和高度数组。其中,分属于字符串$s$和$t$的后缀的高度数组元素的
阅读全文
摘要:计算得到文本串$S$的后缀数组,给出模式串$P$,可以通过二分,在$O(|T|\log |S|)$的时间复杂度内判断模式串是否在文本串中出现过 bool contain(string text,string pattern){ int n=text.length(); int m=pattern.l
阅读全文
摘要:高度数组是由后缀数组中相邻两个后缀的最长公共前缀的长度组成的数组,可以通过尺取法在$O(n)$的时间复杂度内得到 const int maxn=200010; int lcp[maxn]; void construct_lcp(string S,int *sa,int *lcp){ int n=S.
阅读全文
摘要:后缀数组是将某个字符串的所有后缀按照字典序排序后得到的数组,数组中存储的是字符串的起始下标。包括空串,所以如果字符串的长度为$n$,则后缀数组中的元素个数为$n+1$ 后缀数组的计算有基于倍增的时间复杂度为$O(n\log ^2n)$的算法,利用长度为$k$的排序结果对长度为$2k$的字符串排序 设
阅读全文

浙公网安备 33010602011771号