Python实现BF算法

该博客介绍了如何使用Python实现BF(Brute-Force)算法进行字符串模式匹配。代码中详细展示了匹配过程,当模式串在目标串中找到时返回其起始位置,否则返回-1。

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

一、题目要求

实现字符串模式匹配BF(Brute-Force)算法(基于链串也可以)。

函数功能:BF算法­——求模式串t在目标串s是否匹配

函数输入:目标串s、模式串t

函数输出:匹配成功:返回模式串t首次在s中出现的位置

                 匹配不成功:返回-1

二、思路:

借鉴网上C++思路写了python的实现:

1 子串t从头开始,依次与主串对比,匹配失败时子串从头开始,主串后移

2 一个循环三个判断

  •         i和k(主串每次匹配的开头)的距离与j和开头的距离相同且j位于子串末尾——匹配成功
  •         不断判断对应位置是否相同,相同向后遍历
  •         一旦不同使主串后移,子串清0重新开始对比(如果一轮开始前主串剩余长度<子串长度直接匹配失败)

        

三、代码:

#!/usr/bin/python3
# author lzx


# python实现
def BF(s, t):
    i = 0
    j = 0
    k = 0
    flag1 = -1
    while (i < len(s) and j < len(t)):
        # 匹配成功
        if (i - k == j) and (j == len(t) - 1) and (s[i] == t[j]):
            flag1 = k
            break
        # s和t相等就继续向后匹配
        if s[i] == t[j]:
            i = i + 1
            j = j + 1
        # 不相等从k的位置开始匹配
        else:
            k = k + 1
            i = k
            j = 0
            # 假如s中所剩字符小于t中所剩字符
            if (len(s) - i) < len(t):
                flag1 = -1
                break
    return flag1


if __name__ == '__main__':
    s = input('输入目标串s:')
    t = input('输入模式串t:')
    flag = BF(s, t)
    if flag != -1:
        print('t在s的位置:', flag)
    else:
        print(flag, '匹配失败')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值