【數據結構】KMP算法匹配的next數組計算

只是一個普通的demo,考試的時候可能會用到手動計算next數組的情況,這個是代替驗證。

目前必須指定maxsize並對字符串賦值。

好久沒寫c++了下次有空再優化成自動輸入的,核心算法體現出來就好:

#include<iostream>
using namespace std;
int maxsize=12;
void getNext(char *str){
    //1.初始化
    int i,j;
    int *next=new int[maxsize];
    j=0;
    next[0]=0;
    //2.比較不相同的情況
    //其中我們規定,j是前綴,i是後綴 
    for(i=1;i<maxsize;i++){
        while(j>0&&str[i]!=str[j]){
            j=next[j-1];
        }
        //3.比較相同的情況 
        if(str[i]==str[j]) j++;
        //4.賦值 
        next[i]=j;
    } 
    //打印
    cout<<"original:"; 
    for(int i=0;i<maxsize;i++) {
        cout<<(++next[i])<<'\t';
    }
    cout<<endl;
    //先對next數組進行整體右移,空的補-1
    for(int i=maxsize-1;i>0;i--){
        next[i]=next[i-1];
    } 
    next[0]=-1;
    cout<<"processed:";
    //打印
    for(int i=0;i<maxsize;i++) {
        cout<<(next[i])<<'\t';
    }
    
}
int main(){
    char a[]={'a','b','a','b','a','a','a','b','a','b','a','a'};
    getNext(a);
    return 0;
}

截圖如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章