一条染色体中有许多基因,您的生物信息学朋友想检查某个特定染色体是否具有一系列基因。 基因出现的顺序很重要。您想在这件事上帮助您的朋友。 他给您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);
}
}
}
答案 0 :(得分:0)
您的代码中有错误。您可以尝试以下测试案例:
1
a
aaaaa
这应该是“否”,但是您的代码输出是“是”。
问题是您需要提前prevIndex
进行>
prevIndex = ch.indexOf(gem.charAt(n), prevIndex) + 1;