数据结构串的模式匹配算法--BF暴力匹配

2024-09-03 18:28

本文主要是介绍数据结构串的模式匹配算法--BF暴力匹配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BF(Brute-Force,暴力匹配)算法是一种简单的字符串匹配算法,其基本思想是将目标串S逐个字符与模式串P进行比对,直到找到匹配或遍历完S为止。下面是一个使用C语言实现的BF算法示例:

#include <stdio.h>  
#include <string.h>  // BF算法实现  
// 参数:text是文本串,pattern是模式串  
// 返回值:如果找到模式串,则返回模式串在文本串中的起始位置(从0开始计数);如果未找到,则返回-1  
int BF(const char* text, const char* pattern) {  int textLen = strlen(text);  int patternLen = strlen(pattern);  // 遍历文本串  for (int i = 0; i <= textLen - patternLen; i++) {  int j;  // 遍历模式串  for (j = 0; j < patternLen; j++) {  // 如果当前字符不匹配,则跳出内层循环  if (text[i + j] != pattern[j]) {  break;  }  }  // 如果j等于模式串长度,说明模式串匹配成功  if (j == patternLen) {  return i; // 返回模式串在文本串中的起始位置  }  }  // 未找到匹配的模式串  return -1;  
}  int main() {  const char* text = "hello world, welcome to the world of programming!";  const char* pattern = "world";  int index = BF(text, pattern);  if (index != -1) {  printf("Pattern found at index: %d\n", index);  } else {  printf("Pattern not found.\n");  }  return 0;  
}

第二种代码实现,是基于链串的结构体

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  #define SIZE 50  typedef struct Node {  char data[SIZE + 1];  int length;  struct Node* next;  
} Node;  Node* createNode(const char* str) {  Node* newnode = (Node*)malloc(sizeof(Node));  if (newnode == NULL) {  perror("malloc failed");  exit(EXIT_FAILURE);  }  strncpy(newnode->data, str, SIZE);  newnode->data[SIZE] = '\0';  newnode->length = strlen(newnode->data);  newnode->next = NULL;  return newnode;  
}  int BF(Node* s1, Node* s2) {  int i = 0, j = 0;  while (i < s1->length - s2->length + 1) {  j = 0;  while (j < s2->length && s1->data[i + j] == s2->data[j]) {  j++;  }  if (j == s2->length) {  return i; // 返回匹配开始的位置  }  i++; // 移动到文本串的下一个字符  }  return -1; // 未找到匹配  
}  int main() {  Node* arr1 = createNode("fanjunxi");  Node* arr2 = createNode("xi");  printf("arr1: %s\n", arr1->data);  printf("arr2: %s\n", arr2->data);  int index = BF(arr1, arr2);  if (index != -1) {  printf("子串开始于位置: %d\n", index);  } else {  printf("无符合的子串\n");  }  free(arr1);  free(arr2);  return 0;  
}

这篇关于数据结构串的模式匹配算法--BF暴力匹配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133700

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Nginx路由匹配规则及优先级详解

《Nginx路由匹配规则及优先级详解》Nginx作为一个高性能的Web服务器和反向代理服务器,广泛用于负载均衡、请求转发等场景,在配置Nginx时,路由匹配规则是非常重要的概念,本文将详细介绍Ngin... 目录引言一、 Nginx的路由匹配规则概述二、 Nginx的路由匹配规则类型2.1 精确匹配(=)2

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思