HDU 2087 剪花布條(KMP匹配裸題)

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

這題。。。。不多說了。

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
char a[1005], b[1005], Next[1005];
void getNext(int len)
{
    int i = 0, j = -1;
    Next[0] = -1;
    while(i < len) {
        if(j == -1 || b[i] == b[j]) {
            Next[++i] = ++j;
        }
        else {
            j = Next[j];
        }
    }
}
int main ()
{
    while (scanf("%s", a), a[0] != '#') {
        scanf("%s", b);
        int alen = strlen(a);
        int blen = strlen(b);
        getNext(blen);
        int ans = 0, i = 0, j = 0;
        while(i < alen) {
            if(j == -1 || a[i] == b[j]) {
                i ++, j ++;
            }
            else {
                j = Next[j];
            }
            if(j == blen) {
                ans ++;
                j = 0;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章