序列自动机
在阅读本文之前,请先阅读 自动机。
定义
序列自动机是接受且仅接受一个字符串的子序列的自动机。
本文中用
状态
若
令
也就是说,一个状态
序列自动机上的所有状态都是接受状态。
转移
由状态定义可以得到,
为什么是“下一次”出现的位置呢?因为若
实现
从后向前扫描,过程中维护每个字符最前的出现位置:
这样构建的复杂度是
例题
给你两个由小写英文字母组成的串
-
的一个最短的子串,它不是 的子串; -
的一个最短的子串,它不是 的子序列; -
的一个最短的子序列,它不是 的子串; -
的一个最短的子序列,它不是 的子序列。 。
题解
这题的 (1) 和 (3) 两问需要后缀自动机,而且做法类似,在这里只讲解 (2) 和 (4) 两问。
(2) 比较简单,枚举 A 的子串输入进 B 的序列自动机,若不接受则计入答案。
(4) 需要 DP。令
参考代码
贡献者:@WenzelTian@kenlig@mgt@Chrogeek@ouuan
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用