您好,登錄后才能下訂單哦!
本文將為大家詳細介紹“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序列”這一關鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領會,如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。