在串的简单模式匹配中,当模式串位j与目标串位i比较时,两字符不相等,则i的位移方式是?

这个问题是在考察 串的简单模式匹配,也就是所谓的 朴素匹配算法(Brute-Force Matching),它的基本思想是从目标串(主串)中逐个字符尝试与模式串进行匹配。


✅ 场景设定:

  • 模式串:P[0 ... m-1],当前匹配到 P[j]
  • 目标串:T[0 ... n-1],当前匹配到 T[i]
  • P[j] ≠ T[i] 时——匹配失败

✅ 简单模式匹配的位移策略:

匹配失败后,目标串的指针 i 要回退,而不是简单地向前推进。

具体来说:

  • 匹配前:从目标串 T[s] 位置开始尝试匹配 P[0]
  • 匹配中:如果已经匹配了前 j 个字符,但 P[j] ≠ T[i],那么:
    • 将目标串的指针回退至:i = s + 1
    • 模式串指针回退至:j = 0
    • 换句话说,目标串从下一个位置重新开始匹配,模式串从头开始匹配

✅ 简单总结:

P[j] ≠ T[i] 时,目标串的 i 回到起始匹配位置 s 的下一个位置,即:

i ← s + 1,j ← 0

或者理解为:

i ← i - j + 1,j ← 0


✅ 举例说明:

目标串 T: A B C D E
模式串 P: C D F

匹配尝试:

T[0] ≠ P[0] → i = 1,j = 0  
T[1] ≠ P[0] → i = 2,j = 0  
T[2] = P[0]  
T[3] = P[1]  
T[4] ≠ P[2] → 匹配失败,i = 3(从下一个位置继续),j = 0

✅ 答案:

i ← i - j + 1

(匹配失败时,目标串从下一个起点继续匹配)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值