首页 > 编程语言 > 详细

字符串匹配——KMP算法

时间:2020-10-25 23:23:21      阅读:32      评论:0      收藏:0      [点我收藏+]

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

#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];
    }
}

 

字符串匹配——KMP算法

原文:https://www.cnblogs.com/wangtianning1223/p/13875897.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!