题目
DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。
例如,"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。
给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。
分析
- String 字符串 可进行迭代
- 固定尺寸为10的子字符串
解法:双指针
思路
1.固定size的滑动窗口
2.hash值记录出现频次
3.取出频次大于1的元素则为答案
// @lc code=start
/**
* @param {string} s
* @return {string[]}
*/
var findRepeatedDnaSequences = function (s) {
if (s.length < 10) return [];
const res = {};
// 迭代
for (let i = 0; i <= s.length - 10; i++) {
// 构建固定的滑动窗口
const str = s.substring(i, i + 10);
// 使用hash来记录值
res[str] ? (res[str] = res[str] + 1) : (res[str] = 1);
}
const arr = [];
// 寻找符合答案的值
Object.keys(res).forEach((key) => {
if (res[key] > 1) {
arr.push(key);
}
});
return arr;
};
//时间复杂度:O(nl) l为滑动窗口的size
//空间复杂度:O(nl)
总结
今天这道题是主要是练习如何使用基本的固定尺寸的滑动窗口
大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢
大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持
文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com
\