首页 > 试题广场 >

合并字符串的价值

[编程题]合并字符串的价值
  • 热度指数: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
ygb,htdh.,xe就休,c,息juxnnd ,
发表于 2017-07-03 19:17:29 回复(0)
求各位看一下我的哪里出错了,一直没找出来
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String[] a=new String[n];
        String[] b=new String[n];
        for(int i=0;i<n;i++) {
            a[i]=sc.next();
            b[i]=sc.next();
        }
         
        for(int i=0;i<n;i++) {
             
            char[] s=(a[i]+b[i]).toCharArray();
            int[] count=new int[4];
            for(int j=0;j<s.length;j++) {
                if(s[j]=='A') {count[0]++;}
                if(s[j]=='C') {count[1]++;}
                if(s[j]=='G') {count[2]++;}
                if(s[j]=='T') {count[3]++;}
            }
            System.out.println(count[0]/2+count[1]/2+count[2]/2+count[3]/2);
        }  
        }
     
}

发表于 2020-04-15 10:42:09 回复(0)