KMP算法的C#實(shí)現(xiàn)方法
本文實(shí)例簡(jiǎn)述了KMP算法的C#實(shí)現(xiàn)方法,分享給大家供大家參考。具體如下:
具體思路為:next函數(shù)求出模式串向右滑動(dòng)位數(shù),再將模式串的str的next函數(shù)值 存入數(shù)組next。
具體實(shí)現(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("沒(méi)有匹配的字符串!");
else Console.WriteLine(pos1);
Console.Write("請(qǐng)按任意鍵繼續(xù)。。");
Console.ReadKey(true);
}
}
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- C#實(shí)現(xiàn)拼手氣紅包算法
- c# 實(shí)現(xiàn)位圖算法(BitMap)
- 經(jīng)典實(shí)例講解C#遞歸算法
- 少見的C# RSA算法
- C# 數(shù)獨(dú)求解算法的實(shí)現(xiàn)
- 使用C#編寫自己的區(qū)塊鏈挖礦算法
- C#實(shí)現(xiàn)的二維數(shù)組排序算法示例
- C#實(shí)現(xiàn)簡(jiǎn)單的RSA非對(duì)稱加密算法示例
- C#字符串自增自減算法詳解
- 同時(shí)兼容JS和C#的RSA加密解密算法詳解(對(duì)web提交的數(shù)據(jù)加密傳輸)
- C#深度優(yōu)先搜索算法
- c# 實(shí)現(xiàn)KMP算法的示例代碼
相關(guān)文章
Windows系統(tǒng)中使用C#編寫藍(lán)牙通信程序的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Windows系統(tǒng)中使用C#編寫藍(lán)牙通信程序的簡(jiǎn)單實(shí)例,文中的例子使用到了32feet.NET中的InTheHand.Net.Personal類庫(kù),需要的朋友可以參考下2016-04-04
C#中comboBox實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)
給大家分享了C#中comboBox實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的全部代碼,代碼經(jīng)過(guò)測(cè)試,有興趣的朋友跟著做一下。2018-03-03
unity 如何獲取Text組件里text內(nèi)容的長(zhǎng)度
這篇文章主要介紹了unity 獲取Text組件里text內(nèi)容的長(zhǎng)度操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
Unity實(shí)現(xiàn)物體運(yùn)動(dòng)軌跡的繪制
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體運(yùn)動(dòng)軌跡的繪制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

