已解决
C#实现KMP算法,在长字符串中找到第一个符合要求的子字符串
来自网友在路上 144844提问 提问时间:2023-11-02 11:50:24阅读次数: 44
最佳答案 问答题库448位专家为你答疑解惑
KMP算法可以查找符合要求的字符串的索引。
在下面的代码中会打印出方法所消耗的时间。
一些异常的处理:
- 比如当word比longwrod还要长的时候异常处理
- longwrod或者word为空的时候异常处理
- 当word在longwrod中不存在的时候异常处理
static void Main(string[] args){string longwrod = "112312er3338bluifaehilf";string word = "3338";DateTime beforDT = System.DateTime.Now;TMPFunc(longwrod, word);DateTime afterDT = System.DateTime.Now;TimeSpan ts = afterDT.Subtract(beforDT);Console.WriteLine("DateTime总共花费{0}ms.", ts.TotalMilliseconds);}/// <summary>/// TMP算法_查找符合要求的字符串的索引/// </summary>/// <param name="longWord"> 长串</param>/// <param name="word">字串</param>public static void TMPFunc(string longWord, string word){if (string.IsNullOrEmpty(longWord) || string.IsNullOrEmpty(word)){Console.WriteLine("长字符串和查找字符串不能为空。");return;}if (word.Length > longWord.Length){Console.WriteLine("查找字符串长度大于长字符串长度,无法匹配。");return;}int[] prefixTable = CalculatePrefixTable(word);int longWordIndex = 0;int wordIndex = 0;while (longWordIndex < longWord.Length){if (longWord[longWordIndex] == word[wordIndex]){longWordIndex++;wordIndex++;if (wordIndex == word.Length){// 找到了匹配Console.WriteLine("匹配找到在索引 " + (longWordIndex - wordIndex));wordIndex = prefixTable[wordIndex - 1];}}else{if (wordIndex != 0){wordIndex = prefixTable[wordIndex - 1];}else{longWordIndex++;}}}if (wordIndex == 0){Console.WriteLine("未找到匹配。");}}private static int[] CalculatePrefixTable(string word){int[] prefixTable = new int[word.Length];int prefixLength = 0;int i = 1;while (i < word.Length){if (word[i] == word[prefixLength]){prefixLength++;prefixTable[i] = prefixLength;i++;}else{if (prefixLength != 0){prefixLength = prefixTable[prefixLength - 1];}else{prefixTable[i] = 0;i++;}}}return prefixTable;}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"C#实现KMP算法,在长字符串中找到第一个符合要求的子字符串":http://eshow365.cn/6-30141-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!