DNA序列
题目:输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 2000),其中只包含’A’,‘C’,‘G’,'T’这四种字符。
输出描述:输出一个正整数,即最短没有出现在DNA序列s中的DNA片段的长度。
输入:AGGTCTA
输出:2
思路
首先解释下题目,这个DNA片段指的是由A,C,G,T这四个字母组成且长度为i的所有的排列组合。
比如长度为2时,DNA片段有AA,AC,AG,AT,CA,CC,CG,CT,GA,GC,GG,GT,TA,TC,TG,TT这16种情况。
那么我们可以用TreeSet存储所有的长度为i的所有子串,并比较集合和4^i的大小,如果集合的长度比 4^i小,则输出i.
代码
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class mianshiti15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
String str=scan.nextLine();
int len=str.length();
for(int i=1;i<=len;i++) {
TreeSet <String> set=new TreeSet <String> ();
for(int j=0;j<len-i;j++) {
set.add(str.substring(j, j+i));
}
if(set.size()<Math.pow(4, i)) {
System.out.print(i);
break;
}
}
}
}