在串的简单模式匹配中,当模式串位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
(匹配失败时,目标串从下一个起点继续匹配)