{模版}KMP字符串匹配
2016-11-09 22:02
204 查看
出自Farmer_John_LYH(膜拜膜拜)
判断B串是否为A串的字串
如果是,输出x使A[x..x+m−1]=B[1..m]
const
maxn=1000;
maxm=1000;
var
n,m:longint;
i,j,l:longint;
a,b:ansistring;
p:array[0..maxm] of longint;
begin
assign(input,’x.in’);reset(input);assign(output,’x.out’);rewrite(output);
readln(a);n:=length(a);
readln(b);m:=length(b);
p[1]:=0;j:=0;
for i:=2 to m do
begin
while(j>0)and(b[j+1]<>b[i])do j:=p[j];
if(b[j+1]=b[i])then inc(j);
p[i]:=j;
end;
end.
判断B串是否为A串的字串
如果是,输出x使A[x..x+m−1]=B[1..m]
const
maxn=1000;
maxm=1000;
var
n,m:longint;
i,j,l:longint;
a,b:ansistring;
p:array[0..maxm] of longint;
begin
assign(input,’x.in’);reset(input);assign(output,’x.out’);rewrite(output);
readln(a);n:=length(a);
readln(b);m:=length(b);
p[1]:=0;j:=0;
for i:=2 to m do
begin
while(j>0)and(b[j+1]<>b[i])do j:=p[j];
if(b[j+1]=b[i])then inc(j);
p[i]:=j;
end;
j:=0; for i:=1 to n do begin while(j>0)and(b[j+1]<>a[i])do j:=p[j]; if(b[j+1]=a[i])then inc(j); if(j=m)then begin writeln('Yes ',i-m+1); halt; end; end; writeln('No');
end.
相关文章推荐
- 【luogu3375】【模版】kmp字符串匹配
- {模版}KMP字符串匹配
- 【总结】字符串匹配: KMP 和 拓展KMP
- 算法-字符串匹配之KMP
- 字符串匹配算法之KMP
- 字符串匹配算法之KMP
- 【总结】字符串匹配: KMP 和 拓展KMP
- [字符串匹配收集]字符串匹配学习---KMP
- HDU 3746(Cyclic Nacklace)字符串匹配-KMP
- 洛谷 P3375 【模板】KMP字符串匹配
- 【kmp字符串匹配】hdu 2087 剪花布条
- KMP字符串匹配算法
- ICPC2017网络赛(青岛)1003 HDU 6208 字符串匹配KMP
- 字符串匹配算法---Brute force、KMP、Sunday
- 第3次CCF-3-字符串匹配(kmp的简单应用)
- poj 3080 Blue Jeans kmp 字符串匹配
- KMP字符串匹配
- sunday、kmp、 bm、 horspool字符串匹配算法 code
- P3375 【模板】KMP字符串匹配
- kmp-洛谷P3375 【模板】KMP字符串匹配