kmp演算法是字串模式匹配演算法中較為高效的演算法之一,其在某次子串匹配母串失敗時並未回溯母串的指標而是將子串的指標移動到相應的位置。嚴蔚敏老師的書中詳細描述了kmp演算法,同時前面的例子中也描述了子串移動位置的陣列實現的演算法。前面你已經實現了子串移動的陣列,現在就來利用該陣列來實現kmp模式匹配。
下面是相應的演算法:
圖:kmp演算法
3組字串,每組字串佔一行。每行包含由空格分隔的兩個字串,字串僅由英文小寫字母組成且長度不大於100。
每組資料輸出1行,輸出後乙個字串在前乙個字串中的位置,如果不匹配,則輸出0。
string str
thisisalongstring isa
nosubstring subt
1
5
0收起提示[-]
#include#include#includetypedef struct
sstring;
void initstring(sstring *p);
void strassign(sstring *p,char charc);
void get_next(sstring *p,int next);
int index_kmp(sstring *s,sstring *t,int next);
void initstring(sstring *p)
void strassign(sstring *p,char charc)
else
else
p->ch[0]=len;}}
return ;
}void get_next(sstring *p,int next)
else
j=next[j];
}return ;
}int index_kmp(sstring *s,sstring *t,int next)
else}}
if(j==t->ch[0]+1)
return i-t->ch[0];
else
return 0;
}int main()
return 0;
}
KMP字串模式匹配演算法實現
給定字串s和匹配串t,請你求出匹配串t在s中第一次正確匹配的索引位置。若匹配失敗則返回0。如題,c 版本的kmp 模版如下 樣例輸入 string str thisisalongstring isa nosubstring subt 樣例輸出 1 5 0 include include includ...
字串模式匹配KMP演算法
next的值去改變每次匹配的位置 注意 字串的儲存最好用字元陣列,然後用字元輸入的形式,保證正確!利用求模式串的next值來分析遍歷,可以在不改變主串i的值的基礎上,只改變next j 的下標來遍歷 next j include include using namespace std void ge...
字串模式匹配KMP演算法
字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...