KMP算法的C#實現(xiàn)方法
更新時間:2014年09月11日 11:10:38 投稿:shichen2014
這篇文章主要介紹了KMP算法的C#實現(xiàn)方法,代碼簡潔實用,需要的朋友可以參考下
本文實例簡述了KMP算法的C#實現(xiàn)方法,分享給大家供大家參考。具體如下:
具體思路為:next函數(shù)求出模式串向右滑動位數(shù),再將模式串的str的next函數(shù)值 存入數(shù)組next。
具體實現(xiàn)代碼如下:
static void GetNextVal(string str, int [] next)
{
int i = 0;
int j = -1;
next[0] = -1;
while (i < str.Length - 1)
{
if (j == -1 || str[i] == str[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
}
KMP算法代碼如下:
static int KMP(string zstr, string mstr)
{
int i, j;
int[] next = new int[mstr.Length];
GetNextVal(mstr, next);
i = 0;
j = 0;
while (i < zstr.Length && j < mstr.Length)
{
if (j == -1 || zstr[i] == mstr[j])
{
++i;
++j;
}
else
{
j = next[j];
}
}
if (j == mstr.Length)
return i - mstr.Length;
return -1;
}
static void Main(string[] args)
{
string zstr, mstr;
zstr = Console.ReadLine();
mstr = Console.ReadLine();
int pos1;
pos1 = KMP(zstr, mstr);
if (pos1 == -1) Console.WriteLine("沒有匹配的字符串!");
else Console.WriteLine(pos1);
Console.Write("請按任意鍵繼續(xù)。。");
Console.ReadKey(true);
}
}
希望本文所述對大家的C#程序設(shè)計有所幫助。
相關(guān)文章
Windows系統(tǒng)中使用C#編寫藍(lán)牙通信程序的簡單實例
這篇文章主要介紹了Windows系統(tǒng)中使用C#編寫藍(lán)牙通信程序的簡單實例,文中的例子使用到了32feet.NET中的InTheHand.Net.Personal類庫,需要的朋友可以參考下2016-04-04
unity 如何獲取Text組件里text內(nèi)容的長度
這篇文章主要介紹了unity 獲取Text組件里text內(nèi)容的長度操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

