首页 > 试题广场 >

合并字符串的价值

[编程题]合并字符串的价值
  • 热度指数:68 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入两个字符串a和b,合并成一个串c,属于a或b的字符在c中顺序保持不变。如"ACG"和"UT"可以被组合成"AUCTG"或"ACUGT"等。
我们定义字符串c的价值如下:令n为字符串c的长度,分界线k(1<=k<=n-1)将c分为两个子串u=c[1..k],v=c[k+1..n]。u、v中字符的任意排列,使得u、v的最长公共前缀最大,这就是分界线k的价值,而所有分界线k价值最大的一个为字符串c的价值。
比如,字符串c=ACGTTTGCAT的价值为5,因为将该串分成两半得到u=ACGTT,V=TGCAT,重新排列后可以使得u=v,即最长公共前缀为5。
你需要求出所有可能的c中价值最大的字符串,输出这个最大价值即可。

输入描述:
第一行一个整数T(T ≤ 500)。
接下来2T行,每行一个字符串,每两行代表一对字符串a和b(|a|,|b|<=100,000;∑(|a|+|b|)<=500,000),字符串的字符集为{A,C,G,T}。


输出描述:
对于每组数据输出一行,一个整数表示价值最大的c的价值。
示例1

输入

2
ACGT
ACGT
AACCGGTT
ACACAGAT

输出

4
7

热门推荐

通过挑战的用户