本文将为大家详细介绍“java中如何查看重复的DNA序列”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“java中如何查看重复的DNA序列”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。
所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。
编写一个函数来查找 DNA 分子中所有出现超过一次的10个字母长的序列(子串)。
示例:
输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出: ["AAAAACCCCC", "CCCCCAAAAA"]
答案:
1public List<String> findRepeatedDnaSequences(String s) { 2 Set seen = new HashSet(); 3 Set repeated = new HashSet(); 4 for (int i = 0; i + 9 < s.length(); i++) { 5 String ten = s.substring(i, i + 10); 6 if (!seen.add(ten)) 7 repeated.add(ten); 8 } 9 return new ArrayList(repeated);10}
解析:
意思是每次截取10个字符的子串,并且这种字串出现的次数超过一次,代码很简单,每次截取的时候都会存放到seen集合中,如果存放失败,表示出现了重复,再来看一种写法
1public List<String> findRepeatedDnaSequences(String s) { 2 Set<Integer> words = new HashSet<>(); 3 Set<String> repeated = new HashSet<>(); 4 char[] map = new char[26]; 5 //map['A' - 'A'] = 0; 6 map['C' - 'A'] = 1; 7 map['G' - 'A'] = 2; 8 map['T' - 'A'] = 3; 9 for (int i = 0; i < s.length() - 9; i++) {10 int v = 0;11 for (int j = i; j < i + 10; j++) {12 v <<= 2;13 v |= map[s.charAt(j) - 'A'];14 }15 if (!words.add(v)) {16 repeated.add(s.substring(i, i + 10));17 }18 }19 return new ArrayList(repeated);20}
这种解法和第一种其实原理都是一样的,只不过这里存储的是一个int类型,因为0,1,2,3分别表示的是ACGT,int类型的每两位用来存储ACGT中一个,我们还可以每3位存储,最多也就是30位,小于int类型的32位,就是把下面第12行的v<<=2改为v<<=3。但不能每4位存储,因为这样超过了int的范围。
Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是“char”。4、布尔类型,是表示逻辑值的基本数据类型。
如果你能读到这里,小编希望你对“java中如何查看重复的DNA序列”这一关键问题有了从实践层面最深刻的体会,具体使用情况还需要大家自己动手实践使用过才能领会,如果想阅读更多相关内容的文章,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/1010616/blog/4440332