#include
#include
#include
#include
"structfun.h"
using std::string;
using std::printf;
using std::scanf;
using std::endl;
using std::to_string;
intmain()
// }
// next[i]=n;
// i++;
//}//****還是需要兩個迴圈**還是有回溯 不好
//改進 分析ababaaabad
// 0 next[0]
//a 1 next[1]
//a b s[0]!=s[1] 1 next[2]
//aba s[0]=s[2] 2 next[3]
//abab s[1]=s[3] 3 next[4]
//ababa s[2]=s[4] 4 next[5]
//ababaa s[3]!=s[5] 2 next[6]回溯到上次不相等
//ababaaa s[1]!=s[6] 2 next[7]回溯到上次不想等
//ababaaab s[1]=s[7] 3 next[8]
//ababaaaba s[2]=s[8] 4 next[9]
next[0]
=0;next[1]
=1;int i=
1,k=
1,nb=0;
while
(s2[i+1]
!=0)else
//kmp改進,加判斷字首的前乙個和字尾的後乙個是否相等,相等則直接next[i+1]=字首的前乙個
if(s2[i+1]
==s2[nb]
) next[i+1]
=next[nb]
;else
next[i+1]
=k; i++;}
//與主字串進行比較。乙個迴圈遍歷主字串
int f1=
0,f2=0;
string str;
str=s2;
while
(s1[f1]!=0
)else
if(s2[f2]==0
)}system
("pause");
}
字串模式匹配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 匹配成功,返回模式串在目標串的...
字串模式匹配KMP演算法
字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...