洛谷P4112 最短不公共子串

题意:

下面,给两个小写字母串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表示该节点代表的最长

猜你喜欢

转载自www.cnblogs.com/huyufeifei/p/10383732.html
今日推荐