重复的DNA序列
目录
思路一:使用 Set + 遍历一遍
注意点:
- for 循环条件 :
i + 10 <= 10
- 最后结果记得去重
var findRepeatedDnaSequences = function (s) {
let n = s.length;
let res = [];
let S = new Set();
for (let i = 0; i + 10 <= n; i++) {
let str = s.substring(i, i + 10);
// 找到一个重复的
if (S.has(str)) {
res.push(str);
}
S.add(str);
}
// 记得需要去重
return [...new Set(res)];
};
思路二:滑动窗口
var findRepeatedDnaSequences = function (s) {
let S = new Set();
let res = new Set();
let left = 0;
let right = 0;
while (right < s.length) {
// 扩大窗口,移入字符
right++;
// 当子串的长度达到要求
if (right - left == 10) {
let str = s.substring(left, right);
if (S.has(str)) {
res.add(str);
}
S.add(str);
// 缩小窗口,移出字符
left++;
}
}
return [...res];
};
思路三:更好的办法
更好的办法是 Rabin-Karp 滚动哈希算法,一边移动滑动窗口一边快速计算窗口内字符串的哈希值
这里先不看了,这到有这种算法就行