【算法练习】82.重复的DNA序列——哈希表
?加入組隊刷題,每日一題,每天進步?
題目的意思是編寫一個函數(shù)來查找子串,這個子串長度為10,在原字符串中出現(xiàn)超過一次。
——leetcode此題熱評
前言
哈嘍,大家好,我是一條。
糊涂算法,難得糊涂
點擊跳轉(zhuǎn)到《糊涂算法》專欄學(xué)習(xí)java大廠面試必備數(shù)據(jù)結(jié)構(gòu)和算法知識!
Question
187. 重復(fù)的DNA序列
難度:中等
所有 DNA 都由一系列縮寫為 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸組成,例如:“ACGAATTCCG”。在研究 DNA 時,識別 DNA 中的重復(fù)序列有時會對研究非常有幫助。
編寫一個函數(shù)來找出所有目標(biāo)子串,目標(biāo)子串的長度為 10,且在 DNA 字符串 s 中出現(xiàn)次數(shù)超過一次。
示例 1:
輸入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
輸出:[“AAAAACCCCC”,“CCCCCAAAAA”]
示例 2:
輸入:s = “AAAAAAAAAAAAA”
輸出:[“AAAAAAAAAA”]
Solution
利用哈希表去重,sub截取字符串。
Code
所有l(wèi)eetcode代碼已同步至github
歡迎star
/*** @author 一條coding*/ class Solution {public List<String> findRepeatedDnaSequences(String s) {List<String> list = new ArrayList<String>();HashMap<String, Integer> map = new HashMap<>();HashSet<String> set = new HashSet<>();if(s.length()<10){return list;}for (int i = 0; i <= s.length()-10; i++) {String substring = s.substring(i, i + 10);if (map.containsKey(substring)){set.add(substring);}else {map.put(substring,1);}}return new ArrayList<>(set);} }Result
復(fù)雜度分析
- 時間復(fù)雜度:O(NL)
粉絲福利
?今天是堅持刷題更文的第82/100天
?各位的點贊、關(guān)注、收藏、評論、訂閱就是一條創(chuàng)作的最大動力
?更多數(shù)據(jù)結(jié)構(gòu)和算法講解歡迎關(guān)注專欄《糊涂算法》
為了回饋各位粉絲,禮尚往來,給大家準(zhǔn)備了一些學(xué)習(xí)資料
👇 點擊下方卡片關(guān)注后回復(fù)算法 領(lǐng)取👇總結(jié)
以上是生活随笔為你收集整理的【算法练习】82.重复的DNA序列——哈希表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “互联网+”创新创业计划书(二)
- 下一篇: 软件设计师教程(第5版)- 前言和目录