串的模式匹配 KMP演算法 nextval陣列求法

2021-10-08 05:50:41 字數 792 閱讀 1782

一、暴力匹配

#include using namespace std;

#define maxlen 255

typedef structsstring;

//s為主串,t為子串

//暴力匹配

int index(sstring s,sstring t)else

}if(j>t.length)

return i-t.length;

else

return 0;

}

二、kmp演算法——next陣列

#include using namespace std;

#define maxlen 255

typedef structsstring;

//s為主串,t為子串

//kmp-next

int index_kmp(sstring s,sstring t,int next)

else

}if(j>t.length)

return i-t.length;

else

return 0;

}

三、nextval陣列的求法

//next->nextval

void get_nextval(sstring t,int nextval,int next)

}

然後把kmp演算法中的next陣列替換成nextval陣列即可,匹配演算法不變。

串 KMP模式匹配演算法(next陣列)

include include include void get next char t 100 int next int index kmp char s 100 char t 100 int pos int main void get next char t 100 int next else ...

KMP模式匹配演算法 next值求解

j 1 2 3 4 5 6 7 8 模式串 a b a a b c a c next j 0 1 1 2 2 3 1 2 各個位的解釋 1.前兩位必定為0和1。2.計算第三位的時候,看第二位b的next值,為1,則把b和1對應的a進行比較,不同,則第三位a的next的值為1,因為一直比到最前一位,都...

KMP模式匹配演算法求next陣列

j12 3456 78值a baab cacnext01 1223 12j是字串中的位置 從1開始計算 值是字串對應j位置的字母,next是next陣列中的值。下面是計算方法 1 首先next 1 0,next 2 1 這兩個是固定不變的 2 除了j 1和j 2時,求解next j 首先我們要獲取到...