codevs 1204 寻找子串位置

来源:互联网 发布:java iterator next 编辑:程序博客网 时间:2024/05/29 14:44

传送门
kmp模板题。
话说这么小的数据还要用kmp吗?

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<cstdlib>using namespace std;char a[105],b[105];int l1,l2,nxt[105],t;int main(){    scanf("%s%s",a+1,b+1);    l1=strlen(a+1);    l2=strlen(b+1);    for (int i=2;i<=l1;i++){        while (t&&a[i]!=a[t+1]) t=nxt[t];        if (a[i]==a[t+1]) t++;        nxt[i]=t;    }    t=0;    for (int i=1;i<=l1;i++){        while (t&&a[i]!=b[t+1]) t=nxt[t];        if (a[i]==b[t+1]) t++;        if (t==l2){            printf("%d",i-l2+1);            return 0;        }    }}
0 0