给定主串 S = 'ababcabcacbab' 和模式串 T = 'abcac',使用 BF 算法进行模式匹配。在整个匹配过程中,模式串 T 的起始位置(索引 j = 1) 与主串 S 的哪些位置进行了比较?
答案解析
核心考点说明:本题考察 BF 算法中模式串起始位置与主串的比较过程。解题思路分析: BF 算法通过滑动窗口逐个比较主串和模式串。每当发生匹配失败,则模式串回溯到起始位置,主串比较置也回溯到本次起始比较位置的下一位置。我们记录模式串起始位置(即索引 j=1)被比较时对应的主串位置。
1. 首次匹配:T 的起始字符 'a' 与 S 的第 1 个字符 'a' 对齐。
2. 首次匹配失败后,T 的起始字符 'a' 与 S 的第 2 个字符 'b' 对齐。
3. 第 2 次匹配失败后,T 的起始字符 'a' 与 S 的第 3 个字符 'a' 对齐。
4. 第 3 次匹配失败后,T 的起始字符 'a' 与 S 的第 4 个字符 'b' 对齐。
5. 第 4 次匹配失败后,T 的起始字符 'a' 与 S 的第 5 个字符 'c' 对齐。
6. 第 5 次匹配失败后,T 的起始字符 'a' 与 S 的第 6 个字符 'a' 对齐。
7. 第 6 次匹配成功后,找到一个匹配位置,j=1时,i=6。此时完成匹配。算法继续进行, 将模式串和主串后移一位,即此时模式串的 j=1,主串的起始比较位置是 S[7]。
8. 第 7 次匹配失败后,T 的起始字符 'a' 与 S 的第 7 个字符 'b' 对齐。
9. 第 8 次匹配失败后,T 的起始字符 'a' 与 S 的第 8 个字符 'c' 对齐。
10.第 9 次匹配失败后,T 的起始字符 'a' 与 S 的第 9 个字符 'a' 对齐。
综上,在 BF 算法中,当模式串 T 的起始位置(索引 j = 1)会依次与主串 S 的第 1, 2, 3, 4, 5, 6,7, 8, 9位置进行比较。每个选项的详细分析:
A. 错误。此选项只考虑了两次匹配尝试,遗漏了其他位置。
B. 正确。按照上述分析,T 的起始位置会与 S 的第 1, 2, 3, 4, 5, 6, 7, 8, 9 位置进行比较。
C. 错误。此选项只考虑了前6个位置,遗漏了后面的匹配位置。
D. 错误。此选项只考虑了匹配成功的开始位置和第二次比较的位置,遗漏了其他位置。
易错点提醒: 容易遗漏每次匹配失败后模式串回溯时的比较位置。
正确答案:B