字符串匹配:Brute Force算法、KMP算法

本文介绍了字符串匹配中的Brute Force和KMP算法。Brute Force算法是一种暴力检索法,时间复杂度为O(m*n)。而KMP算法避免了回溯,利用next数组优化匹配过程,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、字符串匹配

字符串匹配:即查看Str串(原串)中是否含有Sub串(子串),如果在原串中查找到了子串,则模式匹配成功,返回原串中的第一个字符在主串中的位置;如果未找到,则模式匹配失败,返回-1

字符串匹配常用的算法包括:BF(Brute Force,暴力检索)、RK(Robin-Karp,哈希检索)、KMP(教科书上最常见算法)、BM(Boyer Moore)、Sunday等,下面将详细介绍Brute Force算法和KMP算法。

二、Brute Force算法

Brute Force算法即暴力检索法,也是我们最容易想到的一种算法。其基本思想如下:从原串的第一个字符开始与子串比较,若子串中每个字符都与原串匹配,则返回原串中第一个字符的位置;若不匹配,则原串的下标向后移动,再与子串进行比较。若整个循环完毕,还未找到匹配的位置,则返回-1。

该想法的图示如下:(其中str为原串,sub为子串,i和j分别为原串和子串的下标)

实现该算法的代码如下:

#include <stdio.h>
#include <string.h>
#define NOT_FOUND -1

int searchSubstring(const char *str,const char *sub);

int searchSubstring(const char *str,const char *sub){
	int strLen = strlen(str);
	int subLen = strlen(sub);
	int i;
	int j;
	
	for(i = 0;i <= strLen - su
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值