P4022 [HEOI2015]最短不公共子串
问题描述
在虐各种最长公共子串、子序列的题虐的不耐烦了之后,你决定反其道而行之。
一个串的“子串”指的是它的连续的一段,例如bcd是abcdef的子串,但bde不是。
一个串的“子序列”指的是它的可以不连续的一段,例如bde是abcdef的子串,但bdd不是。
下面,给两个小写字母串A,B,请你计算:
(1) A的一个最短的子串,它不是B的子串
(2) A的一个最短的子串,它不是B的子序列
(3) A的一个最短的子序列,它不是B的子串
(4) A的一个最短的子序列,它不是B的子序列
输入格式
有两行,每行一个小写字母组成的字符串,分别代表A和B。
输出格式
输出4行,每行一个整数,表示以上4个问题的答案的长度。如果没有符合要求的答案,输出-1.
样例输入
aabbcc
abcabc
样例输出
2
4
2
4
提示
对于100%的数据,A和B的长度都不超过2000
此题涉及到子串和子序列,考虑后缀自动机和序列自动机。
那么此题就是在两个自动机上dp。
对于第一问,令$F1[x][y]$表示从A的后缀自动机上x节点,B的后缀自动机上y节点出发的最短不公共子串长度,那么当$x\neq0,y=0$时$F1[x][y]=0$,然后直接在两个自动机上转移就行了,$F1[x][y]=min(F1[tx][ty]+1)$
对于第二问,在A的后缀自动机和B的序列自动机上同样dp即可。
对于第三问,在A的序列自动机和B的后缀自动机上同样dp即可。
对于第四问,在A的序列自动机和B的序列自动机上同样dp即可。
复杂度$O(26n^2)?$
代码:
1 |
|