DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。
- 例如,
"ACGAATTCCG"是一个 DNA序列 。
在研究 DNA 时,识别 DNA 中的重复序列非常有用。
给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。
示例 1:
输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出: ["AAAAACCCCC","CCCCCAAAAA"]
示例 2:
输入: s = "AAAAAAAAAAAAA"
输出: ["AAAAAAAAAA"]
set 集合
弊端在于最终的解会重复,因此还需要建立一个集合进行去重,因此之后改用map
/** * @param {string}
s * @return {string[]}
*/
var findRepeatedDnaSequences = function(s) {
let set = new Set();
let result = [];
for(let i = 0;i<=s.length-10;i++){
let str = s.substring(i,i+10);
if(set.has(str)){
result.push(str)
} set.add(str)
}
return [...new Set(result)] };
map
一旦遍历过的元素超过两次立刻存入解中,并且后续再重复出现不再放入解集中
/**
* @param {string} s
* @return {string[]}
*/
var findRepeatedDnaSequences = function(s) {
let map = new Map();
let result = [];
for(let i = 0;i<=s.length-10;i++){
let str = s.slice(i,i+10);
map.set(str,(map.get(str) || 0)+1)
if(map.get(str)===2){
result.push(str)
}
}
return result
};