只是一個普通的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; }
截圖如下: