HDU - 2087 剪花布条(Kmp)

来源:互联网 发布:房地产文案 知乎 编辑:程序博客网 时间:2024/05/08 03:56

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087

#include <iostream>#include <string>#include <cstring>using namespace std;/*************************************************************************************************************            求目标串中出现了多少个模式串            1,ans++;            2,j = 0;*************************************************************************************************************/int Next[1005];string s,p;void getNext(int m){    int i = 0,j = -1;    Next[0]=-1;    while(i < m){        while(j != -1 && p[i] != p[j])            j = Next[j];        if(p[++i] == p[++j])    Next[i] = Next[j];        else            Next[i]=j;    }}int Kmp(int n,int m){    getNext(m);    int i = 0,j = 0;    int ans = 0;    while(i < n && j < m){        while(j != -1 && s[i] != p[j])            j = Next[j];        i++;        j++;        if(j >= m){            ans++;            j = 0;        }    }    return ans;}int main(){    while(cin>>s){        if(s[0] == '#') break;        cin>>p;        int lt1=s.length(),lt2=p.length();        cout<<Kmp(lt1,lt2)<<endl;    }    return 0;}


0 0