4.2 计算下列串的next数组
#include<iostream>
#define MaxSize 10
using namespace std;
int Next[MaxSize];
void GetNext(string t){
Next[0]=-1;
int i=0,j=-1;//i为当前匹配的位置,j为失配后跳转的位置(最长公共前后缀的长度)
while(i<t.size()){
if(j==-1||t[i]==t[j]){
Next[++i]=++j;
}
else j=Next[j];
}
}
int main()
{
string t;
cin>>t;
GetNext(t);
for(int i=0;t[i];i++)
cout<<Next[i]<<" ";
return 0;
}
/*ABCDEFG:-1 0 0 0 0 0 0
AAAAAAAA:-1 0 1 2 3 4 5 6
BABBABAB:-1 0 0 1 1 2 3 2
AAAAAAB:-1 0 1 2 3 4 5
ABCABDAAABC:-1 0 0 0 1 2 0 1 1 1 2
ABCABDABEABCABDABF:-1 0 0 0 1 2 0 1 2 0 1 2 3 4 5 6 7 8
ABBACXY:-1 0 0 0 1 0 0*/