首页 > 代码库 > 待解决---

待解决---

最长前缀(文件名:Prefix.pas/c/cpp)

一些生物体的复杂结构可以用其基元的序列表示,而一个基元用一个大写英文字符串 表示。生物学家的一个问题就是一个这样的长序列分解为基元(字符串)的序列。对于给 定的基元集合P,如果可以从中选出N 个基元P1,P2,P3,...,Pn,将它们各自对应的字 符串依次连接后得到一个字符串S,称S 可以由基元集合P 构成。在从P 中挑选基元时,一 个基元可以使用多次,也可不用。例如,序列ABABACABAAB 可以由基元集合{A,AB,BA,
CA,BBC} 构成。 字符串的前K 个字符为该字符串的前缀,其长度为K。请写一个程序,对于输入的基元 集合P 和字符串T,求出一个可以由基元集合P 构成的字符串T 的前缀,要求该前缀的长度 尽可能长,输出其长度。

输入数据: 第一行是基元集合P 中的基元数目N (1<=N<=100),随后有2N 行,每两行描述一个基 元,第一行为该基元的长度L (1<=L<=20)。随后一行是一个长度为L 的大写英文字符串, 表示该基元。每个基元互不相同。 最后一行描述要处理的字符串T,T 由大写字母组成,最后一行是一个字符‘.‘,表示字 符串结束。T 的长度最小为1,最大不超过500000。

输出数据: 只有一行,一个数字,表示可以由P 构成的T 的最长前缀的长度。

样例: prefix.in 5 1 A 2 AB 3 BBC 2 CA 2 BA ABABACABAABCB.

prefix.out 11 这道题是不是要用到trie树?标程中处理每段基元时next数组是存什么的?标程部分代码如下:

待解决---