<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
DNA序列 由一系列核苷酸組成,縮寫為 'A', 'C', 'G' 和 'T'.。
例如,"ACGAATTCCG" 是一個 DNA序列 。
在研究 DNA 時,識別 DNA 中的重複序列非常有用。
給定一個表示 DNA序列 的字串 s ,返回所有在 DNA 分子中出現不止一次的 長度為 10 的序列(子字串)。你可以按 任意順序 返回答案。
輸入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
輸出:["AAAAACCCCC","CCCCCAAAAA"]
輸入:s = "AAAAAAAAAAAAA"
輸出:["AAAAAAAAAA"]
提示:
0 <= s.length <= 105
s[i]=='A'、'C'、'G' or 'T'
我們可以用一個雜湊表統計 ss 所有長度為 1010 的子串的出現次數,返回所有出現次數超過 1010 的子串。
程式碼實現時,可以一邊遍歷子串一邊記錄答案,為了不重複記錄答案,我們只統計當前出現次數為 22 的子串。
思路:用map儲存子串出現的次數,迴圈dna序列,每次擷取長度為10的子串,加入map中 並更新出現的次數,次數超過2,加入ans
能做兩個優化:
class Solution { static final int L = 10; public List<String> findRepeatedDnaSequences(String s) { List<String> ans = new ArrayList<String>(); Map<String, Integer> cnt = new HashMap<String, Integer>(); int n = s.length(); for (int i = 0; i <= n - L; ++i) { String sub = s.substring(i, i + L); cnt.put(sub, cnt.getOrDefault(sub, 0) + 1); if (cnt.get(sub) == 2) { ans.add(sub); } } return ans; } }
其中 N 是字串 s 的長度,L=10 即目標子串的長度。
時間複雜度:O(N*L)
空間複雜度:O(N*L)
具體的方法思路已經在上文中表述,該方法為雜湊表的優化方法。
由於 ss 中只含有 44 種字元,我們可以將每個字元用 22 個位元表示,即:
A 表示為二進位制 00;
C 表示為二進位制 01;
G 表示為二進位制 10;
T 表示為二進位制 11。
如此一來,一個長為 10 的字串就可以用 20 個位元表示,而一個 int 整數有 32 個位元,足夠容納該字串,因此我們可以將 ss 的每個長為 10 的子串用一個 int 整數表示(只用低 20 位)。
注意到上述字串到整數的對映是一一對映,每個整數都對應著一個唯一的字串,因此我們可以將方法一中的雜湊表改為儲存每個長為 10 的子串的整數表示。
const L = 10 var bin = map[byte]int{'A': 0, 'C': 1, 'G': 2, 'T': 3} func findRepeatedDnaSequences(s string) (ans []string) { n := len(s) if n <= L { return } x := 0 for _, ch := range s[:L-1] { x = x<<2 | bin[byte(ch)] } cnt := map[int]int{} for i := 0; i <= n-L; i++ { x = (x<<2 | bin[s[i+L-1]]) & (1<<(L*2) - 1) cnt[x]++ if cnt[x] == 2 { ans = append(ans, s[i:i+L]) } } return ans }
以上就是Go Java演演算法重複的DNA序列詳解的詳細內容,更多關於Go Java演演算法重複DNA序列的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45