题意:
下面,给两个小写字母串A,B,请你计算:
(1) A的一个最短的子串,它不是B的子串
(2) A的一个最短的子串,它不是B的子序列
(3) A的一个最短的子序列,它不是B的子串
(4) A的一个最短的子序列,它不是B的子序列
解:这是什么四合一毒瘤题......
先上正解:
前两问枚举A中子串的开始位置,b中贪心匹配。O(n2)。
后两问分别建出B的后缀自动机和序列自动机,然后DP,用f[i][j]表示考虑A的前i个字符,在自动机上走到节点j至少需要几步。
转移就是看节点j有没有A[i + 1]的出边,更新。
好的,接下来上我的SB解法......
第一问,广义后缀自动机裸题。
第二问,我们只需要找出A中的一个子串,它向前/后添加一个字符时在B中无法继续匹配即可。
对A建后缀自动机。
由于这样后缀自动机一个节点的多个子串是逐渐在前面添加字符,所以考虑从后往前找子串,在B中也从后往前匹配。
每个节点有一个posA表示该节点在A中的结尾位置,还有一个pos表示该节点代表的最长