摘要:哈希表法復(fù)雜度時(shí)間空間思路最簡(jiǎn)單的做法,我們可以把位移一位后每個(gè)子串都存入哈希表中,如果哈希表中已經(jīng)有這個(gè)子串,而且是第一次重復(fù),則加入結(jié)果中。如果哈希表沒(méi)有這個(gè)子串,則把這個(gè)子串加入哈希表中。
Repeated DNA Sequences
哈希表法 復(fù)雜度All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACGAATTCCG". When studying DNA, it is sometimes useful to identify repeated sequences within the DNA.
Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.
For example,
Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT",
Return: ["AAAAACCCCC", "CCCCCAAAAA"].
時(shí)間 O(N) 空間 O(N)
思路最簡(jiǎn)單的做法,我們可以把位移一位后每個(gè)子串都存入哈希表中,如果哈希表中已經(jīng)有這個(gè)子串,而且是第一次重復(fù),則加入結(jié)果中。如果已經(jīng)遇到多次,則不加入結(jié)果中。如果哈希表沒(méi)有這個(gè)子串,則把這個(gè)子串加入哈希表中。
代碼public class Solution { public List編碼法 復(fù)雜度findRepeatedDnaSequences(String s) { List res = new LinkedList (); HashMap map = new HashMap (); for(int index = 10; index <= s.length(); index++){ // 從第10位開(kāi)始作為結(jié)尾,位移一位,比較一次子串 String substr = s.substring(index - 10, index); if(map.containsKey(substr)){ // 如果是第一次遇到,則加入結(jié)果 if(map.get(substr) == 1){ res.add(substr); } // 標(biāo)記為已經(jīng)遇到過(guò)一次了 map.put(substr, 2); } else { // 如果不存在,則加入表中 map.put(substr, 1); } } return res; } }
時(shí)間 O(N) 空間 O(N)
思路實(shí)際上我們的哈希表可以不用存整個(gè)子串,因?yàn)槲覀冎雷哟挥?0位,且每一位只可能有4種不同的字母,那我們可以用4^10個(gè)數(shù)字來(lái)表示每種不同的序列,因?yàn)?b>4^10=2^20<2^32所以我們可以用一個(gè)Integer來(lái)表示。具體的編碼方法是用每?jī)晌籦it表示一個(gè)字符。
代碼public class Solution { public ListfindRepeatedDnaSequences(String s) { List res = new LinkedList (); HashMap map = new HashMap (); for(int index = 10; index <= s.length(); index++){ String substr = s.substring(index - 10, index); int code = encode(substr); if(map.containsKey(code)){ if(map.get(code) == 1){ res.add(substr); } map.put(code, 2); } else { map.put(code, 1); } } return res; } private int encode(String str){ int code = 0; for(int i = 0; i < str.length(); i++){ char c = str.charAt(i); // 每?jī)晌槐硎疽粋€(gè)字符 code <<= 2; switch(c){ case "A": code += 0; break; case "C": code += 1; break; case "T": code += 2; break; case "G": code += 3; break; } } return code; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/66173.html
摘要:題目要求所有的都是有這四個(gè)字母組成的,比如。這個(gè)問(wèn)題要求我們?cè)谝粋€(gè)序列中找到出現(xiàn)超過(guò)兩次的長(zhǎng)度為的子序列。因?yàn)閭€(gè)字母意味著每個(gè)字母至少需要位才能表示出來(lái)。因?yàn)槊總€(gè)字符串對(duì)應(yīng)的二進(jìn)制長(zhǎng)度為,小于整數(shù)的,因此是可行的。 題目要求 All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for...
摘要:題目鏈接這道題要求所有重復(fù)出現(xiàn)的序列,那么可以想到得用,因?yàn)檫@里限制了是個(gè)字符長(zhǎng)的序列,所以每次其實(shí)是去掉第一個(gè),再加一個(gè),這個(gè)思想和挺像的,需要用或者來(lái)表示。 187. Repeated DNA Sequences 題目鏈接:https://leetcode.com/problems... 這道題要求所有重復(fù)出現(xiàn)的序列,那么可以想到得用hash table,因?yàn)檫@里限制了是10個(gè)字符...
本文關(guān)鍵給大家介紹了通過(guò)自學(xué)python求已經(jīng)知道DNA模版的相輔相成DNA序列的實(shí)例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪。 DNA序列 ACTGATCGATTACGTATAGTATTTGCTATCATACATATATATCGATGCGTTCAT 求其相輔相成DNA序列。 在微生物上DNA相輔相成編碼序列概述表述能夠表述為:A與T...
此篇文章關(guān)鍵給大家介紹了Python完成一階矩馬爾可夫過(guò)程形成任意DNA序列實(shí)例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪?! ?.基本原理 針對(duì)DNA序列,一階矩馬爾可夫過(guò)程可以看作現(xiàn)階段堿基對(duì)的種類僅在于上一位堿基對(duì)種類。如下圖1所示,1條編碼序列的開(kāi)始(由B逐漸)有可能是A、T、G、C4種堿基對(duì)(且概率同樣,均是0.25),若編碼序列某...
摘要:第三代基因測(cè)序技術(shù)革新云計(jì)算的應(yīng)用一位準(zhǔn)媽媽,在懷孕周時(shí),需要做唐氏兒的篩查,傳統(tǒng)唐篩的方式準(zhǔn)確率低,如果結(jié)果顯示危險(xiǎn)性高,那么準(zhǔn)媽媽還需要做羊膜穿刺等進(jìn)一步檢查。未來(lái)組目前已經(jīng)擁有兩臺(tái)第三代基因測(cè)序儀,而未來(lái)這一數(shù)字將增長(zhǎng)至五臺(tái)。 第三代基因測(cè)序技術(shù)革新 云計(jì)算的應(yīng)用一位準(zhǔn)媽媽,在懷孕12-24周時(shí),需要做唐氏兒的篩查,傳統(tǒng)唐篩的方式準(zhǔn)確率低,如果結(jié)果顯示危險(xiǎn)性高,那么準(zhǔn)媽媽還需要做...
閱讀 3056·2021-11-24 09:39
閱讀 2989·2021-09-29 09:34
閱讀 3738·2021-09-24 10:23
閱讀 1840·2021-09-22 15:41
閱讀 1781·2019-08-30 15:55
閱讀 3582·2019-08-30 13:58
閱讀 2724·2019-08-30 13:11
閱讀 1733·2019-08-29 12:31