建議先複習乙個kmp演算法
這裡可以發現,2345步驟,其實都是多餘的判斷,由於t串中的2345位置的字元都與首位的a相等,那麼可以利用首位next[1]的值去取代與它相等1的字元後續的next[j]的值,因此我們要對next函式進行改良-------我們把改良後的next陣列叫做nextval
#include
using
namespace std;
//nextval陣列
//nextval陣列
void
get_nextval
(string t,
int* nextval)
else
}else}}
//改進kmp改進
inttest
(string s,string t,
int* nextval)
else
} cout <<
"i="
<< i << endl;
cout <<
"j="
<< j << endl;
if(j == t.
length()
)return-1
;}void
test()
;get_nextval
(t, nextval)
;int ret=
test
(s, t, nextval)
; cout <<
"子串t在主串s中的起始位置為:"
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 首先我們要獲取到...
串 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 ...