zoukankan      html  css  js  c++  java
  • KMP记录

    例题:luogu

    P3375 【模板】KMP字符串匹配

    知识点:1.KMP模板,熟悉KMP

        2.理解KMP过程:失配时,是从后缀转向前缀。即失配时,匹配串是从尾转到头继续匹配,被匹配串不改变。

        3.注意字符数组的处理技巧:输入时从c[1]开始输入,求长度时也是求strlen(c + 1)。

    #include <bits/stdc++.h>
    using namespace std;
    int lena,lenb;
    char a[1000010],b[1000010];
    int kmp[1000010];
    int main()
    {
        scanf("%s",a + 1);
        scanf("%s",b + 1);
        lena = strlen(a + 1);
        lenb = strlen(b + 1);
        int j = 0;
        for(int i = 2;i <= lenb;i++)
        {
            while(j && b[j + 1] != b[i])j = kmp[j];
            if(b[j + 1] == b[i])j++;
            kmp[i] = j;
        }
        j = 0;
        for(int i = 1;i <= lena;i++)
        {
            while(j && b[j + 1] != a[i])j = kmp[j];
            if(b[j + 1] == a[i])j++;
            if(j == lenb)
            {
                printf("%d
    ",i - lenb + 1);
                j = kmp[j];
            }
        }
        for(int i = 1;i <= lenb;i++)
            printf("%d ",kmp[i]);
        return 0;
    }
  • 相关阅读:
    配置log4j不同方法打印到不同的日志中
    Logging日志信息(转)
    Mybatis 动态sql
    mysql字段截取(转)
    tomcat多个端口配置
    Map,list,set,集合转化
    简单测试java
    java中有关自增的问题
    DMA复习
    笔试题
  • 原文地址:https://www.cnblogs.com/xyj1/p/10445843.html
Copyright © 2011-2022 走看看