字符串匹配算法

字符串匹配算法

1、字符串匹配

​ 假设有两个串(其中 t i t_i ti p j p_j pj是字符):

t = t 0 t 1 t 2 ⋯ t n − 1 t=t_0t_1t_2\cdots t_{n-1} t=t0t1t2tn1

p = p 0 p 1 p 2 ⋯ p m − 1 p=p_0p_1p_2\cdots p_{m-1} p=p0p1p2pm1

​ 字符串查找就是在 t t t(目标串)中查找与 p p p(模式串)相同的字串的操作或过程。一般来说,模式串的长度远小于目标串的长度,即m<<n。

2、字符串匹配算法

1、朴素串匹配算法(BF算法)

​ 最简单的朴素匹配算法采用最直观可行的策略:从左到右逐个字符匹配,当发现不匹配时,转去考虑目标串里的下一个位置是否与模式串匹配。

#只找到第一个匹配串在目标串中的位置
def naive_matching(t,p):
    i,j = 0,0
    n,m = len(t),len(p)
    while i < n and j < m :
        if t[i] == p[j]:
            i,j = i + 1, j + 1
        else:
            i,j = i -j + 1,0
    if j == m:
        return i - j
    return -1
#找到所有匹配串在目标串中的位置
def naive_matching(t,p):
    i,j = 0,0
    n,m = len(t),len(p)
    list = []
    while i < n :
        if j < m:
            if t[i] == p[j]:
                i,j = i + 1, j + 1
            else:
                i,j = i -j + 1,0
        if j == m:
            list.append(i - j)
            i,j = i - j + 1,0
    if len(list) > 0:
        return list
    return -1
2、无回溯串匹配算法( K M P KMP KMP算法)
1、问题分析
  • K M P KMP KMP算法的基本思想就是匹配中不回溯,如果匹配中出现不匹配的字符时( p i ≠ t j p_i\neq t_j pi=tj),就找到某个特定的 k i k_i k

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值