Date:2022.01.18
题目描述
如果一个集合 P 中的元素可以串起来(元素可以重复使用)组成一个序列 s ,那么我们认为序列 s 可以分解为 P 中的元素。元素不一定要全部出现(如下例中 BBC 就没有出现)。举个例子,序列 ABABACABAAB 可以分解为下面集合中的元素:{A,AB,BA,CA,BBC}
序列 s 的前面 k 个字符称作 s 中长度为 k 的前缀。设计一个程序,输入一个元素集合以及一个大写字母序列 ,设 s’ 是序列 s 的最长前缀,使其可以分解为给出的集合 PP 中的元素,求 s′ 的长度 k。
输入格式
输入数据的开头包括若干个元素组成的集合 O,用连续的以空格分开的字符串表示。字母全部是大写,数据可能不止一行。元素集合结束的标志是一个只包含一个 . 的行,集合中的元素没有重复。
接着是大写字母序列 s ,长度为,用一行或者多行的字符串来表示,每行不超过 7676 个字符。换行符并不是序列 s 的一部分。
输出格式
只有一行,输出一个整数,表示 S 符合条件的前缀的最大长度。
输入输出样例
输入 #1复制
A AB BA CA BBC
.
ABABACABAABC
输出 #1复制
11
思路:设 f [ i ] f[i] f[i]:以 s [ i ] s[i] s[i]结尾的前缀是否合法,合法为1,不合法为0。这里我们第一维 i i i遍历串 s s s,第二维