KMP演算法實現

2022-01-12 06:15:20 字數 978 閱讀 4738

核心是模式串next陣列的生成

#include 

<

stdio.h

>

#include

<

string

.h>

#define

ns 100

intstrpos(

char

s1 ,

char

s2 ,

intn);

void

next(

char

s2,int

n);int

main(

intargc,

char

*args )

;next( args[

2],n );

printf(

"%d\n

",strpos(args[

1],args[

2],n));

return0;

}int

strpos(

char

s1,char

s2,int

n)while

( i

<

l )if

(s2[j]

==s1[i])

else

}return

(j >0&&

s2[j] =='

\0') ?

i-j : -1

;}//模式串對應的回退陣列,標記著主串在和模式串每個位置匹配失敗後,主串應該回退多少位再和模式串逐一匹配

void

next(

char

s2,int

n)else}}

#

kmp abababacb ababacb

2

編譯執行 kmp abababacb ababacb

結果為2

js實現kmp演算法 js實現KMP演算法,淺顯易懂

開始 首先,kmp演算法是用來幹什麼的?用來匹配字串,如果匹配,返回索引值。其次,為什麼要用kmp演算法?因為能簡化時間複雜度 廢話,演算法都是用來提公升效率的 然後,kmp演算法是以什麼方式簡化時間複雜度的?一般我們匹配字串可以用正規表示式,或者拿這個字串與目標字串乙個個比較,那麼就有乙個問題,如...

KMP演算法C c 實現

直接上 using system using system.collections.generic using system.text namespace dotnetkmp class program public static int strnext 失效函式值 static void main...

KMP演算法c 實現

遞推求解next陣列,初始的情況是next 0 1.假設在某乙個時刻有如下的等式成立 str 0.k 1 str j k.j 1 那麼next j k,在這個前提下,繼續進行下乙個字元的匹配.1 如果str 0.k str j k.j 那麼next j 1 next j 1 k 1.2 反之,如果上...