codeforces 1553D

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

链接

一个与标答不同的想法

首先,根据观察可知:如果我们从前往后匹配,当前匹配上了 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更优。 iji<jjii

有 关 结 尾 时 判 断 s 剩 余 字 符 的 问 题 : 有关结尾时判断s剩余字符的问题: s
由 于 t 是 确 定 的 串 , 所 以 s 当 前 位 置 的 奇 偶 性 变 换 的 次 数 是 固 定 的 。 由于t是确定的串,所以s当前位置的奇偶性变换的次数是固定的。 ts

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值