字符串朴素匹配法(Naive matching):Python代码实现

字符串匹配是一种常见的字符串操作,常用于从文本中查找特定的模式串或者字符串。在实际的程序开发中,我们经常需要对字符串进行匹配操作,从而找到其中的特定模式或者子字符串。朴素匹配法(Naive matching)是一种简单而有效的字符串匹配算法,本文就对其进行详细的介绍。

朴素匹配法是一种基于枚举的字符串匹配算法。它的基本思想是从主串的第一个字符开始,依次与模式串的第一个字符、第二个字符、第三个字符……进行比较,直到匹配成功或者主串中的字符都被比较过。在比较过程中,如果发现某个字符不匹配,则将主串的指针移动到下一个位置,重新开始比较,直到匹配成功或者主串的指针移到最后一个位置。

def naive_matching(t, p):
    m = len(p) # 模式串的长度
    n = len(t) # 主串的长度
    i, j = 0, 0 # 分别表示模式串和主串的指针位置
    count = 0 # 记录比较次数
    while i < m and j < n: # 依次比较模式串和主串中的字符
        count += 1
        if p[i] == t[j]: # 如果匹配成功,则继续比较下一个字符
            i, j = i+1, j+1
        else: # 如果匹配失败,则主串的指针移动到下一个位置,重新开始比较
            i, j = 0, j-i+1
    if i == m: # 如果模式串全部匹配成功,则返回匹配的起始位置和比较次数
        return j - i ,count
    return -1,0 # 如果未找到匹配的子串,则返回-1和0

下面我们通过一个例子来说明朴素匹配法的工作原理。假设我们要在字符串t="abcbbc"中查找子串p=“bb”,则可以调用naive_matching函数,如下所示:

text = "abcbbc"
pattern = "bb"
pos, count= naive_matching(text, pattern)
if pos == -1:
    print("未找到匹配的字符串")
else:
    print("首次匹配位置为", pos)
    print("字符匹配总次数为", count)

输出结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值