我正在解决以下问题,但所有测试用例均未通过Java

时间:2018-11-22 17:32:58

标签: java

一条染色体中有许多基因,您的生物信息学朋友想检查某个特定染色体是否具有一系列基因。 基因出现的顺序很重要。您想在这件事上帮助您的朋友。 他给您n条染色体和一系列他想检查的基因。帮助他识别这些基因是否存在于 染色体按给定顺序。

由于您不是生物学专业的学生,​​他使您的工作变得更轻松。他用ASCII字母,数字或特殊字符表示基因。 空格不代表基因。

示例

如果染色体是abdfgc,而他要查询的基因是abc,则它们以正确的顺序出现在染色体中(以粗体标记)。 a*b*dfg*c*。但是,如果查询为bca,则在染色体中的查询顺序不正确。

输入

输入的第一行包含一个整数n,它是测试用例的数量。

每个测试用例由两行输入组成:

  • 第一行包含染色体
  • 第二行包含您要查询的基因 输出

如果按顺序将基因包含在染色体中,则该染色体-基因对的输出应为“是”,否则为“否”。 输出应包含n行,其中包含YES / NO。

约束

1 <= n <= 10000

1 <= |chromosome| <100

1 <= |gene| < |chromosome|

样本输入

4
12sd78f
sf
12345efd
1e3d
ijkfgds
jkf
1111456
116

示例输出

YES
NO
YES
YES

代码

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class solution {

private static String checkGem(String ch, String gem) {

    int prevIndex = 0;
    for(int n=0; n < gem.length(); n++) {
        if(ch.indexOf(gem.charAt(n), prevIndex)==-1) {
            return "NO";
        }
        else {
            prevIndex = ch.indexOf(gem.charAt(n), prevIndex);
        }
    }

    return "YES";
}
public static void main(String args[]) throws Exception {

    //Scanner sc = new Scanner(System.in);
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String test = br.readLine();    

    int t = Integer.parseInt(test);

    for(int i=0; i<t; i++) {
        String ch = br.readLine();
        String gem = br.readLine();
        ch = ch.replaceAll("\\s","");
        gem =  gem.replaceAll("\\s","");
        String ans = checkGem(ch, gem);
        System.out.println(ans);
    }

    }
}

1 个答案:

答案 0 :(得分:0)

您的代码中有错误。您可以尝试以下测试案例:

1
a
aaaaa

这应该是“否”,但是您的代码输出是“是”。

问题是您需要提前prevIndex进行

prevIndex = ch.indexOf(gem.charAt(n), prevIndex) + 1;