zoukankan      html  css  js  c++  java
  • KMP模板

    #include<bits/stdc++.h>
    using namespace std;
    
    /*************************KMP模板****************************/
    int f[101];//优化后的失配指针,记住这里f要比P多一位,因为P到m-1即可,但是f还要计算出m的失配指针
    int f2[101];//f2用来保存KM指针,是为优化f的失配指针,f保存的是优化之后的失配指针
    char T[1000];//待匹配串
    char P[100];//模板串
    void getFail(char *P, int *f)
    {
        int m = strlen(P);
        f[0] = f[1] = 0;
        f2[0]=f2[1]=0;
        for(int i = 1; i < m; i++)
        {
            int j = f2[i];
            while(j && P[i] != P[j] ) j = f2[j];
            f2[i+1] = f[i + 1] = (P[i] == P[j]) ? j + 1 : 0;
    
            //既然i+1的失配位置指向j+1,但是P[i+1]和P[j+1]的内容是相同的
            //所以就算指针从i+1跳到j+1去,还是不能匹配,所以f[i+1]直接=f[j+1]
            if(f[i+1]==j+1 && P[i+1]==P[j+1]) 
                f[i+1]=f[j+1];
        }
    }
    void find(char *T, char *P, int *f) //找到所有匹配点
    {
        int n = strlen(T);
        int m = strlen(P);
        int j = 0;
        for(int i = 0; i < n; i++)
        {
            while(j && T[i] != P[j]) j = f[j];
            if(T[i] == P[j]) j++;
            if(j == m) printf("%d
    ", i - m + 1);
        }
    }
    /*************************KMP模板****************************/
    int main()
    {
        return 0;
    }
  • 相关阅读:
    The Worm Turns
    Equations
    Snail’s trouble
    WuKong
    Codeforces 369 C Valera and Elections
    POJ 2186 Popular Cows
    Codefroces 366 D Dima and Trap Graph (最短路)
    Codefroces 366 C Dima and Salad(dp)
    Codefroces 374 B Inna and Sequence (树状数组 || 线段树)
    Codeforces 374 C Inna and Dima (DFS)
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/5975280.html
Copyright © 2011-2022 走看看