直接上**:
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演算法是以什麼方式簡化時間複雜度的?一般我們匹配字串可以用正規表示式,或者拿這個字串與目標字串乙個個比較,那麼就有乙個問題,如...