码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法

时间:2018-04-20 00:01:48      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:crt   efi   include   cab   ack   cin   ios   stack   define   

http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1005

题解:kmp模板题。

如何理解kmp?

 

背下来就好了

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<stack>
#include<iostream>
using namespace std;
const int maxn = 1e5 + 5;
char t[maxn];
char p[maxn];
int tlen, plen;
int k[maxn];
bool kmp() {
    int i = 1,j = 0;
    while (i < plen) {
        if (p[i] == p[j])k[i] = j+1, i++, j++;
        else {
            if (j == 0)k[i] = 0,i++;
            else j = k[j - 1];
        }
    }//k数组更新
    i = 0, j = 0;
    
    while (j < plen&&i < tlen) {
        if (t[i] == p[j])i++, j++;
        else {
            if (j == 0)i++;
             else j = k[j - 1];
        }
    }
    if (j == plen)return 1;
    else return 0;

}

int main() {
    scanf("%s", t);
     tlen = strlen(t);
    int n;
    cin >> n;
    while (n--) {
        scanf("%s", p);
         plen = strlen(p);
        if (kmp())puts("yes");
        else puts("no");
    }
    cin >> n;
}
/*
abxabcabcaby
1
abcaby
*/

 

KMP算法

标签:crt   efi   include   cab   ack   cin   ios   stack   define   

原文地址:https://www.cnblogs.com/SuuT/p/8886264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!