串的模式匹配-BF算法

本文介绍了串的模式匹配中的BF算法,该算法从主串和子串的第一个字符开始比较,若匹配失败则从主串失配字符的下一个位置重新开始。虽然思路简单,但最坏情况下的时间复杂度高达O(n*m)。作者在实践中意识到对指针的理解和字符串操作是实现过程中的挑战,并提到KMP算法作为更常用的解决方案。

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

串的模式匹配经常需要用到,判断一个字符串是否是另外一个字符串的一部分。前者称为子串或模式,后者成为主串或正文串。

先用最简单的BF算法实现串的模式匹配。

算法思路:先从主串和子串第一个位置开始进行比较。如果相等,那么继续比较后面的字符,否则从主串失配的下一个元素开始和子串的第一个元素继续匹配。直到比较到主串最后位置,如果一直不匹配,则匹配失败,否则得到匹配的位置。

最好情况时间复杂度:O(n+m)
(假设每次不成功的匹配都发生在子串的第一个字符)
最坏情况时间复杂度:O(n*m)
(假设每次不成功的匹配都发生在子串的最后一个字符)

算法优点:思路简单明了。
算法缺点:时间复杂度高。

#include <iostream>
using namespace std;

#include<stdio.h>
#include<string.h>

//字符串采用数组存储.
typedef struct
{
    char ch[100];
    int length;
}HString;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值