zoukankan      html  css  js  c++  java
  • 字符串匹配——KMP算法

    原理有点太绕了,找时间补上,先贴代码

    #include<iostream>
    #include<string>
    using namespace std;
    
    int* Next;
    
    int KMP(char* Str, char* SubStr);
    void NextTable(char* Str);
    
    int main(void)
    {
        string A, B;
        cin >> A;
        cin >> B;
    
        char* Str=const_cast<char*>(A.c_str());
        char* SubStr=const_cast<char*>(B.c_str());
    
        //cout << Str << endl << SubStr << endl;
    
        Next = new int[strlen(Str)];
    
        NextTable(Str);
        cout << KMP(Str, SubStr) << endl;
    
        system("pause");
        return 0;
    }
    
    int KMP(char* Str, char* SubStr)
    {
        int i = 0;
        int j = 0;
    
        while (i < strlen(Str) && j < strlen(SubStr))
        {
            if (j == -1 || Str[i] == SubStr[j])
            {
                i++;
                j++;
            }
            else
                j = Next[j];
        }
    
        if (j == strlen(SubStr))
            return i - j;
        else
            return -1;
    }
    
    void NextTable(char* Str)
    {
        int i = 0, j = -1;
        Next[0] = -1;
    
        while (i < strlen(Str))
        {
            if (j == -1 || Str[i] == Str[j])
            {
                ++i;
                ++j;
                Next[i] = j;
            }
            else
                j = Next[j];
        }
    }
  • 相关阅读:
    Matlab norm 用法小记
    C51存储器类型 MCS51单片机物理存储器区域
    MATLAB 中NORM运用
    Matlab norm 用法小记
    C51存储器类型 MCS51单片机物理存储器区域
    MATLAB 中NORM运用
    poj2031
    poj1039
    poj3122
    poj3980
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/13875897.html
Copyright © 2011-2022 走看看