字串KMP模式匹配演算法

2021-10-06 20:47:29 字數 1358 閱讀 6467

#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 匹配成功,返回模式串在目標串的...