KMP算法 的C#实现,初级版本

static void Main(string[] args){#region 随机字符StringBuilder sb = new StringBuilder();string S = "ABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789";Random r = new Random();for (int f = 0; f < 100000; f++){if (f % 4 == 0){sb.Append("AABCDAABCD");}else{sb.Append(S.Substring(r.Next(1, S.Length - 4), 4));}}string sourceStr = sb.ToString();Console.WriteLine("待匹配的字符长度为:" + sourceStr.Length);#endregion Console.WriteLine("start");Stopwatch sw = new Stopwatch();sw.Start();string ostr = "AABCDAABCD";//目标字符/*找到对应位置的最大移动长度*/Dictionary<int, int> dic = GetMaxMoveLength(ostr);int success = 0;for (int i = 0; i < sourceStr.Length; i++){int j = 0;while (j < ostr.Length && i + j < sourceStr.Length && ostr[j] == sourceStr[i + j]){j++;}if (j == ostr.Length){success++;}i += j;}sw.Stop();Console.WriteLine("成功" + success+"个");Console.WriteLine("时间:"+sw.ElapsedMilliseconds+"毫秒");Console.WriteLine("End");Console.ReadKey();}static Dictionary<int, int> GetMaxMoveLength(string ostr){Dictionary<int, int> CanMoved = new Dictionary<int, int>();for (int i = 0; i < ostr.Length; i++){List<string> q = new List<string>();List<string> h = new List<string>();string tempstr = ostr.Substring(0, i + 1);for (int j = 1; j < tempstr.Length; j++){q.Add(tempstr.Substring(0, j));}for (int j = tempstr.Length - 1; j > 0; j--){h.Add(tempstr.Substring(j, tempstr.Length - j));}//获取该位置的最大长度IEnumerable<string> keys = q.Intersect(h);int movelength = 0;foreach (string s in keys){if (s.Length > movelength){movelength = s.Length;}}CanMoved.Add(i, i-movelength);}return CanMoved;}

View Code

在42万5000个字符中匹配到25000个目标字符用时10毫秒

转载于:https://www.cnblogs.com/zzfstudy/p/7427499.html

KMP算法 C#实现 字符串查找简单实现相关推荐

  1. 一步一步写算法(之字符串查找 下篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们谈到了KMP算法,但是讲的还不是很详细.今天我们可以把这个问题讲的稍微详细一点.假设在 ...

  2. 一步一步写算法(之字符串查找 中篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 昨天我们编写了简单的字符查找函数.虽然比较简单,但是也算能用.然而,经过我们仔细分析研究一下, ...

  3. 一步一步写算法(之字符串查找 上篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解.字符串的比较.字符串的 ...

  4. HDU 3613 Best Reward 扩展kmp算法(将一个字符串分成两个回文串)

    题目链接:https://vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. Now ...

  5. 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串. 2.0 问题分析 "KMP算法"是对字符串查找"简单算法"的优化. 字符串查找"简单算法"是源 ...

  6. 数据结构(十)——KMP算法

    一.KMP算法简介 1.通用暴力匹配算法 通常的字符串匹配算法流程如下: 从主串(目标字符串)和模式串(待匹配字符串)的第一个字符开始比较,如果相等则继续匹配下一个字符, 如果不相等则从主串的下一个字 ...

  7. leetcode 028.实现strStr(),即查找重复字符串(KMP算法)

    前言 本题是经典的字符串单模匹配的模型,因此可以使用字符串匹配算法解决,常见的字符串匹配算法包括暴力匹配.Knuth-Morris-Pratt 算法.Boyer-Moore 算法.Sunday 算法等 ...

  8. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  9. 【字符串】字符串查找 ( Rabin-Karp 算法 )

    文章目录 一.字符串查找 二.Rabin-Karp 算法 一.字符串查找 算法题目链接 : https://www.lintcode.com/problem/13/ 在 一个字符串 中查找 另外一个字 ...

  10. KMP算法--子串查找问题

    目录 一.前言 二.KMP算法简介 三.关键概念1:字符串的前后缀 四. 关键概念2:字符串相等前后缀与最长相等前后缀长度 五.关键概念3:Next数组 六.Next数组在算法中的应用: 七.模式串N ...

最新文章

  1. public接口可以被任何一个类实现_一文带你深入Java核心技术:对象克隆+接口与回调,还有这种操作...
  2. 设计模式学习(六):重构与模式,推荐书籍(完)
  3. PHP后期静态绑定概念和用法
  4. eos操作系统_如何基于EOS区块链发一个自己的币,挣它一个亿?
  5. SqlServer数据库同步方案详解
  6. Java: 将中文省市名转换为指定格式拼音
  7. hls ask 调制
  8. [项目源码]ERP进销存系统
  9. MAC jd-gui 安装
  10. paddle深度学习基础之训练调试与优化
  11. springboot基于web的摩托车销售系统的设计与实现毕业设计源码031706
  12. loT行业生死竞速:Aqara绿米得用户得天下
  13. 怎么压缩图片大小?建议收藏这些方法
  14. 只是一个文件节点类为了项目的数据处理
  15. 为什么吃鸡体验服说当前服务器正在维护,“吃鸡”玩家盼了90天的体验服,发来“41字提醒”,含泪退出了!...
  16. openflow交换机 ryu_ryu(示例代码)
  17. mysql向上向下递归查询父集子集
  18. P4287 [SHOI2011]双倍回文
  19. windows下python自带的pip安装速度过慢解决方案
  20. i5 11300h和r5 4600h的差别大吗

热门文章

  1. html移动端即时翻译插件,React框架实现移动页面翻译是一种什么体验?
  2. 计算机取证之你必须要会用的24款工具
  3. WPF 获取控件模板中的控件
  4. Entity Framework之IQueryable和list本地集合
  5. FPGA实现任意分频 为所欲为——教你什么才是真正的任意分频
  6. 公共代码参考(DisplayMetrics)
  7. adb shell 命令详解
  8. 造个轮子 | 自己动手写一个Redis
  9. JavaScript--百度地图那些坑
  10. Android Volley 源码解析(三),图片加载的实现