所有 DNA 都由一系列縮寫為 'A','C','G' 和 'T' 的核苷酸組成,例如:"ACGAATTCCG"。在研究 DNA 時(shí),識(shí)別 DNA 中的重復(fù)序列有時(shí)會(huì)對(duì)研究非常有幫助。
編寫一個(gè)函數(shù)來找出所有目標(biāo)子串,目標(biāo)子串的長度為 10,且在 DNA 字符串 s 中出現(xiàn)次數(shù)超過一次。
示例 1:
輸入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
輸出:["AAAAACCCCC","CCCCCAAAAA"]
示例 2:
輸入:s = "AAAAAAAAAAAAA"
輸出:["AAAAAAAAAA"]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/repeated-dna-sequences
解題思路
用一個(gè)窗口,長度為10,掃描字符串,窗口每次往右挪動(dòng)一個(gè)單位
以及兩個(gè)HashSet,將每個(gè)掃描結(jié)果加入其中一個(gè)HashSet,當(dāng)掃描片段在這個(gè)HashSet中已經(jīng)存在則添加到另一個(gè)HashSet,將后者轉(zhuǎn)為List返回
代碼
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
HashSet<String> result = new HashSet<>();
HashSet<String> set = new HashSet<>();
for (int i = 0; i + 9 < s.length(); i++) {
String sequence = s.substring(i, i + 10);
if (!set.contains(sequence)) {
set.add(sequence);
} else {
result.add(sequence);
}
}
return new ArrayList<>(result);
}
}