摘要: //p[]为最长回文半径长度,id为当前最靠右端回文串的中心点(多个取最靠左),mx为id对应的回文串的最右端坐标+1void manacher(char *s,int len){ p[0] = 1; int mx = 0 , id = 0; for(int i = 1 ;i i ? min(p[id*2 - i],mx-i) : 1; while(s... 阅读全文
posted @ 2018-10-15 12:02 mxzf0213 阅读(138) 评论(0) 推荐(0) 编辑
摘要: //对于字符串a的每个后缀,匹配它与a的第一个后缀的最长公共前缀,复杂度线性void z_algorithm(char *a,int len) { z[0]=len; for(int i=1,j=1,k;i<len;i=k) { if(j<i)j=i; while(j<len && a[j]==a[j-i])++j; z[i... 阅读全文
posted @ 2018-10-15 11:22 mxzf0213 阅读(291) 评论(0) 推荐(0) 编辑