Processing math: 100%

随笔分类 -  KMP

摘要:~~不想写题。不如写写算法总结?~~ KMP 前(che)言(dan) 以前都不知道 KMP 为什么叫 KMP ,现在才明白:该算法是三位大牛: D.E.Knuth 、 J.H.Morris 和 V.R.Pratt 同时发现的,以其名字首字母命名。 KMP 可以在O(n+m)的时间复 阅读全文
posted @ 2019-03-25 09:15 Xu-daxia 阅读(248) 评论(0) 推荐(1) 编辑
摘要:求出一个串使得这个串是s1,s2的子串。串中不包含s3。 如果没有这个s3就可以二分答案,然后height小于二分值分一组。看看每组里是不是出现过s1,s2的后缀。判断就行。 然后有了s3之后,我们考虑改变一下height数组。 我们把s1s2拼在一起构成一个新串s。(中 阅读全文
posted @ 2019-01-03 22:12 Xu-daxia 阅读(165) 评论(0) 推荐(0) 编辑
摘要:题意 给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. (n<=1000000) 题解 这种求最小循环节的题一般是KMP。 因为有一个很强的结论if(len%(len-nxt[len])==0)那这个字符串的最小环节为len-nxt[l 阅读全文
posted @ 2018-08-24 15:54 Xu-daxia 阅读(122) 评论(0) 推荐(0) 编辑
摘要:题意 题解 因为,一直用j=nxt[j]来遍历,可以遍历前i个字符所有相等的前后缀长度,所以有一个暴力的想法,就是对于每一个长度,开始遍历,记录长度小于i/2的相等的前后缀数量,最后累加即可。 但显然超时了。 换一种思路,其实我们要的只是长度小于i/2的相等的前后缀数量。 然后我们可以利用KMP的方 阅读全文
posted @ 2018-08-24 15:32 Xu-daxia 阅读(185) 评论(0) 推荐(0) 编辑
摘要:题意 给出一个字符串问有多少长度,使这个长度的前缀等于这个长度的后缀。 n<=400000 题解 考虑nxt数组的意义。我们发现构建nxt数组时,一直跳nxt数组就是在枚举,所有前缀和后最相等的长度。 所以我们求出nxt数组,然后一直跳nxt[len]就好了。 阅读全文
posted @ 2018-08-22 11:39 Xu-daxia 阅读(162) 评论(0) 推荐(0) 编辑
摘要:题意 求最小循环节出现次数。 题解 循环节可以用KMP求。 有一个结论是如果(len%(len-nxt[len])==0)那么最小循环节长度为len-nxt[len] 那么最小的循环节出现次数就是len/(len-nxt[len]) 那我们怎么证明呢 (黑色的方框代表nxt数组最长相等的前缀和后缀的 阅读全文
posted @ 2018-08-22 09:35 Xu-daxia 阅读(147) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示