C++_KMP算法的實現

#include <iostream>

using namespace std;

int* getNext(string b)
{
    int len = b.length();
    int *next = new int[len+1];
    next[0] = next[1] = 0;
    int j = 0;
    //j始終表示長度爲i-1的字符串的next值,即前一個
    for(int i = 1;i<len;i++)
    {
        while(j!=0&&b[i]!=b[j])
            j = next[j];
        if(b[i] == b[j])
            j++;
        next[i+1] = j;
    }

    return next;
}

void match(string stra, string strb, int *next)
{
    int i = 0;
    int j = 0;
    while(i<stra.length()&&j<strb.length())
    {
        if(stra[i] == strb[j]||j==0)
        {
            i++;
            j++;
            cout << i << " * " << j << endl;
        }
        else
        {
            j = next[j+1];
            cout << i << " ^ " << j << endl;
        }
        if(j == strb.length())
        {
            cout << "Success" << endl;
            break;
        }
    }
}


int main()
{
    string a ="dafadfadjcacca";
    string s = "cacca";
    int *nextofs = getNext(s);
    for(int i = 1;i<=s.length();i++)
    {
        cout << nextofs[i] << endl;
    }
    match(a,s,nextofs);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章