KMP演算法C c 實現

2021-05-22 09:11:25 字數 1620 閱讀 1420

直接上**:

using system;

using system.collections.generic;

using system.text;

namespace dotnetkmp

class program

public static int strnext;//失效函式值

static void main(string args)

const string strfortest = "abaabcac";

const string strforaim = "abaabcac";

setnext(strfortest);

int i =  kmp(strforaim, strfortest);

console.read();

///

/// 對輸入串進行失效匹配初始化

///

public static void setnext( string  inputstr)

int strlen = inputstr.length; 

strnext = new int[strlen];

int i = 0, j = -1;

strnext[0] = -1;

while(iif (j == -1 || inputstr[i] == inputstr[j])

i++;

if (i >= strlen)

break;

j++;

strnext[i] = j;

else

j = strnext[j];

///

/// kmp演算法實現 輸出輸入串在目標串中的起始位置 沒有則輸出-1

///

/// 目標串

/// 輸入串

public static int kmp(string aimstr,string teststr)

int i = 0, j = 0;

while(i< aimstr.length&&j < teststr.length)

if(j==-1)

i++;

j = 0;

else if(aimstr[i] == teststr[j])

i++;

j++;

else

j = strnext[j];

if (j < teststr.length)

return -1;

else

return i - j;

詳解請看

c++版本 

int strlen(char *inputstr)

} return len; }

unsigned int str_str(char * src, char *dst)//kmp實現字串字串查詢

else

} i = 0; 

j = 0;

while(i

else

} if(j < dlen)

return 0;

else

}

串,包括KMP演算法(C C )

ifndef stringadt h define stringadt h include define folwover 1 struct stringadt typedef struct stringadt string struct stringadt 為s開闢合適空間,儲存輸入的chars ...

KMP演算法實現

核心是模式串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 ...

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

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