一个与标答不同的想法
首先,根据观察可知:如果我们从前往后匹配,当前匹配上了 s s s 的第 i i i个字符,那么下一个能匹配的一定是与当前位置 i i i的奇偶性不同的位置。
然后我们就分奇偶建立序列自动机,然后从头开始时枚举是从奇数位置开始还是偶数位置。然后按一般的序列自动机匹配方式双指针扫就可以了。
普遍的坑点(fst点)在于即使匹配上了, s s s剩下的字符个数也需要是偶数个,否则就不行(末尾字符都要删)。
然后是这种做法的正确性证明:
考虑两个奇偶性相同且字符相同的位置 i , j ( i < j ) : j 所 能 跳 转 的 位 置 , i 都 能 跳 转 , 显 然 选 择 i 更 优 。 i,j(i<j):j所能跳转的位置,i都能跳转,显然选择i更优。 i,j(i<j):j所能跳转的位置,i都能跳转,显然选择i更优。
有 关 结 尾 时 判 断 s 剩 余 字 符 的 问 题 : 有关结尾时判断s剩余字符的问题: 有关结尾时判断s剩余字符的问题:
由 于 t 是 确 定 的 串 , 所 以 s 当 前 位 置 的 奇 偶 性 变 换 的 次 数 是 固 定 的 。 由于t是确定的串,所以s当前位置的奇偶性变换的次数是固定的。 由于t是确定的串,所以s当前位置的奇偶性变换的次

这篇博客探讨了一种奇偶序列自动机匹配算法,用于解决字符串匹配问题。作者详细介绍了算法思路,包括如何根据字符奇偶性构建状态转移矩阵,并通过双指针扫描进行匹配。文章强调了在匹配过程中确保剩余字符个数为偶数的重要性,并提供了错误处理和正确性证明。最后,给出了C++代码实现来验证算法的正确性。
最低0.47元/天 解锁文章
476

被折叠的 条评论
为什么被折叠?



