C#,字符串匹配(模式搜索)BF(Brute Force)暴力算法的源代码
2023-09-11 14:15:48 时间
字符串匹配算法(模式搜索 Pattern Search)的应用于包括但不限于:生物信息学、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测、论文查重等等等等。
一、字符串匹配算法(模式搜索)
字符串匹配算法,就是在一个字符串text中查找是否存在一个(或多个)模式字符串pattern。
如: "ABCDEFG" 中是否存在 “EF” ?有几个?
常见的字符串匹配算法:
1、BF(Brute Force,暴力算法);
2、RK (Robin-Karp 算法);
3、KMP (D.E.Knuth、J.H.Morris、V.R.Pratt 算法);
4、哈希Hash与移动哈希算法;
二、BF(Brute Force,暴力算法)
BF 算法是一种原始、低级的穷举算法。
简单,就是顺序逐个比较呗。
using System;
using System.Collections;
using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
{
/// <summary>
/// 字符串匹配(模式搜索)算法集锦
/// </summary>
public static partial class PatternSearch
{
/// <summary>
/// 字符串匹配的暴力算法(1)
/// </summary>
/// <param name="text"></param>
/// <param name="pattern"></param>
/// <returns></returns>
public static List<int> NativeSearch_Original(string text, string pattern)
{
int pt = pattern.Length;
List<int> matchs = new List<int>();
for (int i = 0; i < (text.Length - pt); i++)
{
if (text.Substring(i, pt) == pattern)
{
matchs.Add(i);
}
}
return matchs;
}
/// <summary>
/// 字符串匹配的暴力算法(2)
/// </summary>
/// <param name="text"></param>
/// <param name="pattern"></param>
/// <returns></returns>
public static List<int> NativeSearch(string text, string pattern)
{
int M = pattern.Length;
int N = text.Length;
int S = N - M;
List<int> matchs = new List<int>();
if (S <= 0) return matchs;
for (int i = 0; i <= S; i++)
{
int j = 0;
while (j < M)
{
if (text[i + j] != pattern[j])
{
break;
}
j++;
}
if (j == M)
{
matchs.Add(i);
}
}
return matchs;
}
}
}
相关文章
- C#winform抓取百度,Google搜索关键词结果
- 演练:Office 编程(C# 和 Visual Basic)
- c# 中内部类的简单介绍 C#内部类
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
- 请求大神,C#如何截取字符串中指定字符之间的部分 按指定字符串分割 一分为二 c# 去除字符串中的某个已知字符
- 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
- [C#基础]c#中的BeginInvoke和EndEndInvoke
- Word控件Spire.Doc 【页面背景】教程(3) ;如何在 C# 中设置单词段落底纹
- C#学习记录——接口的实现
- C#,图论与图算法,搜索无向无权连通图(Undirected Unweighted Graph)的简单环(Simple Cycle)的算法与源代码
- C#,二叉搜索树(Binary Search Tree)的迭代方法与源代码
- C#,字符串匹配(模式搜索)Boyer Moore算法的源代码
- C#,字符串匹配算法(模式搜索)Z算法的源代码与数据可视化
- [C#] Direct2D 学习笔记 (一)vb.net转换为c#
- c# 搜索字符串
- c#连接Redis Redis的安装与配置
- C#学习笔记(三)—–C#高级特性:dynamic
- [C#]LINQ中如何按实体的某个属性去重 DistinctBy
- [转]C# ADO.NET SqlDataAdapter中传递参数