kmp算法

简介

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <set>
#include <string.h>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iostream>
#include <queue>
#include <list>
using namespace std;

// 求next矩阵
vector<int> getNext(string p)
{
    vector<int> result( p.size(), 0 );
    int k = 0;
    for (int i = 1; i < p.size(); i++)
    {
        while (k > 0 && p[k] != p[i])
            k = result[k-1];
        if (p[k] == p[i])
            k++;
        result[i] = k;
    }
    return result;
}
// kmp的具体过程,即判断p是否为s的子串
bool kmp(string s, string p)
{
    vector<int> next = getNext( p );
    int k = 0;
    for (int i = 0; i < s.size(); i++)
    {
        while (k != 0 && p[k] != s[i])
            k = next[k-1];
        if (p[k] == s[i])
            k++;
        if (k == p.size())
            return true;
    }
    return false;
}

int main()
{
    auto ret = kmp( "ababxbababcadfdsss", "fds" );
    system("pause");
    return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012526003/article/details/79945939
文章标签: kmp C++ 字符串处理
个人分类: C++ C++primer
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭