zoukankan      html  css  js  c++  java
  • 【模板】kmp

    洛谷 P3375 

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #define sz 1000010
    using namespace std;
    int fail[sz];
    char a[sz], b[sz];
    inline void init(int n) {
        int j = 0;
        fail[1] = 0;
        for(int i = 2; i <= n; i++) {
            while(j>0 && b[i] != b[j+1]) j = fail[j];
            if(b[i] == b[j+1]) j++;
            fail[i] = j;
        }
    }
    inline void match(int n, int m) {
        int j = 0;
        for(int i = 1; i <= n; i++) {
            while(j>0 && a[i] != b[j+1]) j = fail[j];
            if(a[i] == b[j+1]) j++;
            if(j == m) printf("%d
    ",i-m+1), j = fail[j];
        }
    }
    inline void print(int n) {
        for(int i = 1; i <= n; i++) printf("%d ",fail[i]);
    }
    int main() {
        scanf("%s%s",a+1, b+1);
        int lena = strlen(a+1), lenb = strlen(b+1);
        init(lenb); match(lena, lenb); print(lenb);
        return 0;
    }

     我学了一下午kmp,结果某人说noip考的字符串匹配hash就可以搞定QAQ

    总之岁月漫长,然而值得期待。
  • 相关阅读:
    构建高性能的读服务
    Redis基础入门
    基于TCP实现简单的聊天室
    递归

    Go标准库Cond
    排序(冒泡,选择,插入,快速)
    链表
    队列
    Golang实现RPC
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9509687.html
Copyright © 2011-2022 走看看