File tree 1 file changed +52
-0
lines changed
1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ #### 187. 重复的DNA序列
2
+
3
+ 难度:中等
4
+
5
+ ---
6
+
7
+ ** DNA序列** 由一系列核苷酸组成,缩写为 ` 'A' ` , ` 'C' ` , ` 'G' ` 和 ` 'T' ` .。
8
+
9
+ * 例如,` "ACGAATTCCG" ` 是一个 ** DNA序列** 。
10
+
11
+ 在研究 ** DNA** 时,识别 DNA 中的重复序列非常有用。
12
+
13
+ 给定一个表示 ** DNA序列** 的字符串 ` s ` ,返回所有在 DNA 分子中出现不止一次的 ** 长度为 ` 10 ` ** 的序列(子字符串)。你可以按 ** 任意顺序** 返回答案。
14
+
15
+ ** 示例 1:**
16
+
17
+ ```
18
+ 输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
19
+ 输出:["AAAAACCCCC","CCCCCAAAAA"]
20
+ ```
21
+
22
+ ** 示例 2:**
23
+
24
+ ```
25
+ 输入:s = "AAAAAAAAAAAAA"
26
+ 输出:["AAAAAAAAAA"]
27
+ ```
28
+
29
+ ** 提示:**
30
+
31
+ * ` 0 <= s.length <= 10^5 `
32
+ * ` s[i]``==``'A' ` 、` 'C' ` 、` 'G' ` or ` 'T' `
33
+
34
+ ---
35
+ 哈希表 + 固定窗口的滑动:
36
+
37
+ 固定窗口内的字符作为哈希表的 key, value 为出现的次数。次数等于 2 则加入到 res 里。
38
+
39
+ ``` Go
40
+ func findRepeatedDnaSequences (s string ) []string {
41
+ var res []string
42
+ hashmap := make (map [string ]int )
43
+ for i := 0 ; i <= len (s) - 10 ; i++ {
44
+ sub := s[i:i+10 ]
45
+ hashmap[sub]++
46
+ if hashmap[sub] == 2 {
47
+ res = append (res, sub)
48
+ }
49
+ }
50
+ return res
51
+ }
52
+ ```
You can’t perform that action at this time.
0 commit comments