您好,登錄后才能下訂單哦!
本文將為大家詳細(xì)介紹“java中如何查看重復(fù)的DNA序列”,內(nèi)容步驟清晰詳細(xì),細(xì)節(jié)處理妥當(dāng),而小編每天都會更新不同的知識點(diǎn),希望這篇“java中如何查看重復(fù)的DNA序列”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內(nèi)容如下,一起去收獲新知識吧。
所有 DNA 由一系列縮寫為 A,C,G 和 T 的核苷酸組成,例如:“ACGAATTCCG”。在研究 DNA 時,識別 DNA 中的重復(fù)序列有時會對研究非常有幫助。
編寫一個函數(shù)來查找 DNA 分子中所有出現(xiàn)超過一次的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個字符的子串,并且這種字串出現(xiàn)的次數(shù)超過一次,代碼很簡單,每次截取的時候都會存放到seen集合中,如果存放失敗,表示出現(xiàn)了重復(fù),再來看一種寫法
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}
這種解法和第一種其實(shí)原理都是一樣的,只不過這里存儲的是一個int類型,因?yàn)?,1,2,3分別表示的是ACGT,int類型的每兩位用來存儲ACGT中一個,我們還可以每3位存儲,最多也就是30位,小于int類型的32位,就是把下面第12行的v<<=2改為v<<=3。但不能每4位存儲,因?yàn)檫@樣超過了int的范圍。
Java的基本數(shù)據(jù)類型分為:1、整數(shù)類型,用來表示整數(shù)的數(shù)據(jù)類型。2、浮點(diǎn)類型,用來表示小數(shù)的數(shù)據(jù)類型。3、字符類型,字符類型的關(guān)鍵字是“char”。4、布爾類型,是表示邏輯值的基本數(shù)據(jù)類型。
如果你能讀到這里,小編希望你對“java中如何查看重復(fù)的DNA序列”這一關(guān)鍵問題有了從實(shí)踐層面最深刻的體會,具體使用情況還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。