跳至内容
CVBB ACM Team
用户工具
注册
登录
站点工具
搜索
工具
显示页面
修订记录
Copy this page
导出 PDF
反向链接
最近更改
媒体管理器
网站地图
注册
登录
>
最近更改
媒体管理器
网站地图
您在这里:
front_page
»
2020-2021
»
teams
»
farmer_john
»
2sozx
»
字符串
»
扩展kmp
2020-2021:teams:farmer_john:2sozx:字符串:扩展kmp
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
=====扩展kmp===== ====简介==== 定义母串 $S$,和字串 $T$,设 $S$ 的长度为 $n,T$ 的长度为 $m$ ,求 $T$ 与 $S$ 的每一个后缀的最长公共前缀,也就是说,设 $extend$ 数组, $extend[i]$ 表示 $T$ 与 $S[i,n-1]$ 的最长公共前缀,要求出所有 $extend[i](1\le i\le n)$。 ====代码==== <hidden> <code cpp> l1=strlen(a+1),l2=strlen(b+1); nxt[1]=l2; i=1; while(b[i]==b[i+1]&&i+1<=l2) i++; nxt[2]=i-1; pos=2; for(i=3;i<=l2;i++){ if(pos+nxt[pos]>=i) nxt[i]=min(nxt[i-pos+1],pos+nxt[pos]-i); while(b[nxt[i]+1]==b[nxt[i]+i]) nxt[i]++; if(nxt[i]+i>pos+nxt[pos]) pos=i; } pos=1; int l=min(l1,l2); for(i=1;i<=l;i++) { if(a[i]!=b[i]) break; extend[1]=i; } for(i=2;i<=l1;i++){ if(pos+extend[pos]>=i) extend[i]=min(nxt[i-pos+1],pos+extend[pos]-i); while(extend[i]+1<=l2&&extend[i]+i<=l1&&b[extend[i]+1]==a[extend[i]+i]) extend[i]++; if(extend[i]+i>pos+extend[pos]) pos=i; } </code> </hidden>
2020-2021/teams/farmer_john/2sozx/字符串/扩展kmp.txt
· 最后更改: 2020/05/23 15:07 由
2sozx
页面工具
显示页面
修订记录
反向链接
Copy this page
导出 PDF
回到顶部