[LeetCode] 187. Repeated DNA Sequences

The DNA sequence is composed of a series of nucleotides abbreviated as ‘A’, ‘C’, ‘G’, and ‘T’.

For example, “ACGAATTCCG” is a DNA sequence.

When studying DNA, it is useful to identify repeated sequences within the DNA.

Given a string s that represents a DNA sequence, return all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. You may return the answer in any order.

Example 1:
Input: s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
Output: [“AAAAACCCCC”,”CCCCCAAAAA”]

Example 2:
Input: s = “AAAAAAAAAAAAA”
Output: [“AAAAAAAAAA”]

Constraints:
1 <= s.length <= 105
s[i] is either ‘A’, ‘C’, ‘G’, or ‘T’.

重复的DNA序列。

DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。
例如,”ACGAATTCCG” 是一个 DNA序列 。在研究 DNA 时,识别 DNA 中的重复序列非常有用。
给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/repeated-dna-sequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

给的 input 是一个 DNA 序列,请输出所有出现多次的 DNA 子序列。这题有位运算的做法但是感觉用 hashset 的做法更方便。注意 DNA 的定义是一个长度为 10 的子字符串。
思路是用两个 hashset,第一个存子序列是否出现过(seen),第二个存最后的输出(res)。当某个子序列在 seen 中已经有了,就存入 res;最后输出 res 里面所有的子序列。

复杂度

时间O(n) - n 是 input 字符串长度
空间O(n) - 用了两个 hashset

代码

Java实现

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
HashSet<String> seen = new HashSet<>();
HashSet<String> res = new HashSet<>();
for (int i = 0; i < s.length() - 9; i++) {
String str = s.substring(i, i + 10);
if (!seen.add(str)) {
res.add(str);
}
}
return new ArrayList<>(res);
}
}

JavaScript实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @param {string} s
* @return {string[]}
*/
var findRepeatedDnaSequences = function(s) {
let seen = new Set();
let res = new Set();
for (let i = 0; i < s.length - 9; i++) {
const str = s.substring(i, i + 10);
if (seen.has(str)) {
res.add(str);
} else {
seen.add(str);
}
}
return Array.from(res);
};

[LeetCode] 187. Repeated DNA Sequences
https://shurui91.github.io/posts/2461659226.html
Author
Aaron Liu
Posted on
October 17, 2019
Licensed under