HDU 1711:Number Sequence (KMP入门)

来源:互联网 发布:js原型面试题 编辑:程序博客网 时间:2024/06/05 06:42

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



字符串的匹配变成了数字的匹配,思路一样。


AC代码:

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int text[1000010];int patten[10010];int nex[10010];void getNext(int m) {    nex[0] = -1;    int k = -1,j = 0;    while(j < m) {        if(k == -1 || patten[j]==patten[k]) {            k++;            j++;            nex[j] = k;        }        else {            k = nex[k];        }    }}int kmp(int n,int m) {    int i = 0,j = 0;    int lenp = m;   //模式串的长度    int lent = n;   //文本串的查改都    while(i < lent && j<lenp) {        if(j == -1 || text[i]==patten[j]) {            i++;            j++;        }        else            j = nex[j];    }    if(j>=lenp)        return i-lenp+1;    return -1;}int main() {    int N,M,T;    scanf("%d",&T);    while(T--) {        scanf("%d%d",&N,&M);        for(int i = 0; i < N; i++) {            scanf("%d",&text[i]);        }        for(int i = 0; i < M; i++) {            scanf("%d",&patten[i]);        }        getNext(M);        int ans = kmp(N,M);        printf("%d\n",ans);    }    return 0;}


原创粉丝点击