KMP算法 C#实现 字符串查找简单实现
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#实现 字符串查找简单实现相关推荐
- 一步一步写算法(之字符串查找 下篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面我们谈到了KMP算法,但是讲的还不是很详细.今天我们可以把这个问题讲的稍微详细一点.假设在 ...
- 一步一步写算法(之字符串查找 中篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 昨天我们编写了简单的字符查找函数.虽然比较简单,但是也算能用.然而,经过我们仔细分析研究一下, ...
- 一步一步写算法(之字符串查找 上篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解.字符串的比较.字符串的 ...
- HDU 3613 Best Reward 扩展kmp算法(将一个字符串分成两个回文串)
题目链接:https://vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. Now ...
- 算法(2)KMP算法
1.0 问题描述 实现KMP算法查找字符串. 2.0 问题分析 "KMP算法"是对字符串查找"简单算法"的优化. 字符串查找"简单算法"是源 ...
- 数据结构(十)——KMP算法
一.KMP算法简介 1.通用暴力匹配算法 通常的字符串匹配算法流程如下: 从主串(目标字符串)和模式串(待匹配字符串)的第一个字符开始比较,如果相等则继续匹配下一个字符, 如果不相等则从主串的下一个字 ...
- leetcode 028.实现strStr(),即查找重复字符串(KMP算法)
前言 本题是经典的字符串单模匹配的模型,因此可以使用字符串匹配算法解决,常见的字符串匹配算法包括暴力匹配.Knuth-Morris-Pratt 算法.Boyer-Moore 算法.Sunday 算法等 ...
- 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...
- 【字符串】字符串查找 ( Rabin-Karp 算法 )
文章目录 一.字符串查找 二.Rabin-Karp 算法 一.字符串查找 算法题目链接 : https://www.lintcode.com/problem/13/ 在 一个字符串 中查找 另外一个字 ...
- KMP算法--子串查找问题
目录 一.前言 二.KMP算法简介 三.关键概念1:字符串的前后缀 四. 关键概念2:字符串相等前后缀与最长相等前后缀长度 五.关键概念3:Next数组 六.Next数组在算法中的应用: 七.模式串N ...
最新文章
- public接口可以被任何一个类实现_一文带你深入Java核心技术:对象克隆+接口与回调,还有这种操作...
- 设计模式学习(六):重构与模式,推荐书籍(完)
- PHP后期静态绑定概念和用法
- eos操作系统_如何基于EOS区块链发一个自己的币,挣它一个亿?
- SqlServer数据库同步方案详解
- Java: 将中文省市名转换为指定格式拼音
- hls ask 调制
- [项目源码]ERP进销存系统
- MAC jd-gui 安装
- paddle深度学习基础之训练调试与优化
- springboot基于web的摩托车销售系统的设计与实现毕业设计源码031706
- loT行业生死竞速:Aqara绿米得用户得天下
- 怎么压缩图片大小?建议收藏这些方法
- 只是一个文件节点类为了项目的数据处理
- 为什么吃鸡体验服说当前服务器正在维护,“吃鸡”玩家盼了90天的体验服,发来“41字提醒”,含泪退出了!...
- openflow交换机 ryu_ryu(示例代码)
- mysql向上向下递归查询父集子集
- P4287 [SHOI2011]双倍回文
- windows下python自带的pip安装速度过慢解决方案
- i5 11300h和r5 4600h的差别大吗