如何解决当出现不匹配时,为什么我们从 KMP 算法中已经构造的数组中获取值,而不是从第一个开始?
为什么我们在向后移动时(当存在不匹配时)从 KMP 算法中已经构造的数组中获取值,而不是从第一个开始?还有它是如何保证从那个点开始,值是好的?
例如:
id = 0 1 2 3 4 5 6 7 8
s = a a b a a b a a a
arr 0 1 0 1 2 3 4 5 2
考虑到 i = 0
和 j = 1
,我们开始算法。
为什么我们有移动的条件:
i > 0 and charat(i) != charat(j) then i = arr[i-1]
KMP 中的这条线究竟是如何工作的?
解决方法
arr
专门用于利用您之前已匹配的内容,以便在发生不匹配时抢占先机。
例如:假设您已匹配 aabaa
,但下一个字符不是预期的 b
,而是 a
。这意味着我们到目前为止处理的结束为 aa
,这就是为什么 arr[i-1]
是 2:我们在开始时匹配 aa
的位置我们正在寻找的字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。