当前位置: 首页 > news >正文

在串的简单模式匹配中,当模式串位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

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

相关文章:

  • 《数据结构世界的乐高积木:顺序表的奇幻旅程》
  • MySQL常见问题解答
  • SQL 多表查询:数据整合与分析的强大工具
  • Java实现插入排序算法
  • C++学习:六个月从基础到就业——STL算法(一) 基础与查找算法
  • 23种设计模式-结构型模式之享元模式(Java版本)
  • Java并发编程之CompletableFuture原理与实践
  • 杭电oj(1087、1203、1003)题解
  • 什么是CAN的非破坏仲裁?
  • Java基础(包装器,关键字,修饰符,Object)
  • 实验2 python的TCP群聊系统实现
  • Java基础:认识注解,模拟junit框架
  • 3dmax模型怎么导入酷家乐插件,材质贴图在,可优化不卡,可批量处理,无需打开一个个max,可批量转FBX/GLB/GLTF/OBJ/SU
  • 查询Hologres或postgresql中的数据
  • 即插即用模块(3) -LSK 特征提取
  • Spring--统一数据返回格式与统一异常处理
  • 将 MySQL 8 主从复制延迟优化到极致
  • 如何在iStoreOS DHCP中排除特定IP地址
  • zkPass案例实战之合约篇
  • 【论文#目标检测】Attention Is All You Need
  • 神二十瞄准明日17时17分发射
  • 广州一男子早高峰爬上猎德大桥顶部疑似要跳桥,路段一度拥堵
  • 委托第三方可一次性补缴十多万元的多年社保?广州多人涉嫌被骗后报警
  • 哈佛大学就联邦经费遭冻结起诉特朗普政府
  • 普京呼吁乌方响应和平倡议,称将分析民用设施停火提议
  • 浙江一季度GDP为22300亿元,同比增长6.0%