#USACO1231. 最长前缀

最长前缀

题目描述

在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣。

如果一个集合 PP 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 SS ,那么我们认为序列 SS 可以分解为 PP 中的元素。

元素不一定要全部出现(如下例中BBC就没有出现)。

举个例子,

序列 ABABACABAAB 可以分解为下面集合中的元素:{A, AB, BA, CA, BBC}

序列 SS 的前面 KK 个字符称作 SS 中长度为 KK 的前缀。

设计一个程序,输入一个元素集合以及一个大写字母序列 SS ,设SS'是序列SS的最长前缀,使其可以分解为给出的集合PP中的元素,求SS'的长度KK

输入格式:

首先,将输入短序列集合 PP,集合中的元素将在一行或多行中给出,每个短序列之间用空格隔开。

集合的所有元素都输入完毕后,会在独立的一行输入一个 . 表明集合已经输入完毕。

保证集合中的元素互不相同。

然后输入大写字母序列 SS,序列可能占一行或多行,每行最多包含 76 个字母,换行符不是序列的一部分。

输出格式:

只有一行,输出一个整数,表示 SS 符合条件的前缀的最大长度。

A AB BA CA BBC  
.  
ABABACABAABC
11

提示

PP 中的元素数量不会超过 200,每个元素的长度不会超过 10。

SS 的长度不会超过 2×1052×10^5