小Biu的期中考试刚刚结束调皮的尛Biu不喜欢学习,所以他考试中抄袭了小Piu的试卷
考试过程中一共有n道题目,每道题目的标准答案为区间[1,5]中的一个正整数
现在有小Piu和小Biu的答案序列a和b,现在老师想知道两个答案序列最长连续相等的子串的长度是多少
输出一个正整数表示两个序列的最长相等子串的长度。
首先如果这两个长字符串存在某个最长的公共子串,那么该子串一定分别是这两个串的后缀的前缀.所以我们将两个串中间加一个符号’$’然后連接起来形成一个新串(还要添尾0).然后我们求这个新串的height数组值我们从sa[1]到新串长sa[n-1]依次扫描字典序相邻的两个后缀的LCP,如果这两个后缀分别屬于之前不同的两个串那么他们的LCP值就可能是他们最长连续公共子串的长度。否则的话就不是
为什么上面的做法对呢?想想假设串a和串b存在最长字串c(长len),那么c是a串的后缀i的前缀c是b串的后缀j的前缀。所以在新串中按字典序排序的height数组后缀i和后缀j一定是相邻的。假设后缀i與后缀j之间还有后缀k无论后缀k属于a串还是b串,k肯定与i与j的公共部分要>=len(想想是不是这样?)
//保存原始字符串+‘\0’后形成的字符串 //即原始字符串茬s中表示[0,n-2]范围 /// x[i]是第i个元素的第一关键字 y[i]表示第二关键字排名为i的数,第一关键字的位置 //即表示排名i-1和排名i的后缀的最大公共前缀LCP长度
那些说我不强的喷子们 这个视频 伱们可以看看 说我盗图的 可以看看我id就叫长歌 这些都是我打的 我学业紧张打不上101星 所以每次就只能打到荣耀了
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。