$SAM$ + 子序列自动机.
对于两个串,建出它们各自的后缀自动机和子序列自动机.
对于每种询问,就将两个对应的自动机取出来,跑 $bfs$ .
某个状态 $(a,b)$ ,接受了一个字符 $c$ 后,若 $A$ 的自动机上有出边,而 $B$ 没有,则当前状态的深度 $+1$ 就是答案.
若两者都有出边,就将转移到的新的状态入队.
记忆化一下,时间复杂度 $O(n^2|S|)$ ,其中 $S$ 表示字符集大小.
1 | //%std |
夢はここに 思い出は遠くに
$SAM$ + 子序列自动机.
对于两个串,建出它们各自的后缀自动机和子序列自动机.
对于每种询问,就将两个对应的自动机取出来,跑 $bfs$ .
某个状态 $(a,b)$ ,接受了一个字符 $c$ 后,若 $A$ 的自动机上有出边,而 $B$ 没有,则当前状态的深度 $+1$ 就是答案.
若两者都有出边,就将转移到的新的状态入队.
记忆化一下,时间复杂度 $O(n^2|S|)$ ,其中 $S$ 表示字符集大小.
1 | //%std |