LeetCode #187: Repeated DNA Sequences
来源:互联网 发布:服装erp软件排名 编辑:程序博客网 时间:2024/05/21 01:46
Problem Statement
(Source) All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: “ACGAATTCCG”. When studying DNA, it is sometimes useful to identify repeated sequences within the DNA.
Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.
For example,
Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT",Return:["AAAAACCCCC", "CCCCCAAAAA"].
Solution
Naive first:
class Solution(object): def findRepeatedDnaSequences(self, s): """ :type s: str :rtype: List[str] """ if not s: return [] n = len(s) if n < 11: return [] res = set() dic = {} for i in range(n - 9): sub = s[i : i + 10] if sub not in dic: dic[sub] = 1 else: res.add(sub) return list(res)
Tweak it a little bit:
class Solution(object): def findRepeatedDnaSequences(self, s): """ :type s: str :rtype: List[str] """ if not s: return [] n = len(s) if n < 11: return [] res = [] dic = {} for i in range(n - 9): sub = s[i : i + 10] dic[sub] = dic.get(sub, 0) + 1 if dic[sub] == 2: res.append(sub) return res
Final solution using Bit Manipulation
to save space by converting strings to integers:
class Solution(object): def findRepeatedDnaSequences(self, s): """ :type s: str :rtype: List[str] """ n = len(s) if n <= 10: return [] res = [] y = 0 m = {'A': 0, 'C': 1, 'G': 2, 'T': 3} counter = dict() for i in xrange(n): y = (y * 4 + m[s[i]]) & 0xFFFFF if i < 9: continue counter[y] = counter.get(y, 0) + 1 if counter[y] == 2: res.append(s[i - 9 : i + 1]) return res
0 0
- leetcode 187: Repeated DNA Sequences
- LeetCode #187Repeated DNA Sequences
- Leetcode 187 Repeated DNA Sequences
- LeetCode(187)Repeated DNA Sequences
- leetcode 187: Repeated DNA Sequences
- [leetcode] 187 Repeated DNA Sequences
- LeetCode 187 Repeated DNA Sequences
- LeetCode 187 Repeated DNA Sequences
- leetcode(187):Repeated DNA Sequences
- LeetCode #187: Repeated DNA Sequences
- LeetCode[187] Repeated DNA Sequences
- [leetcode][187]Repeated DNA Sequences
- Leetcode 187 Repeated DNA Sequences
- Leetcode 187 Repeated DNA Sequences
- LeetCode.187 Repeated DNA Sequences
- Leetcode Repeated DNA Sequences
- Repeated DNA Sequences [leetcode]
- [LeetCode] Repeated DNA Sequences
- mac
- Gym 100507G The Debut Album
- 设计模式之-代理模式
- CentOS 7.2 Mitaka云平台控制节点部署脚本(VLAN+VXLAN+DVR私有网络)
- Effective Java学习笔记: 第57条只针对异常的情况才使用异常
- LeetCode #187: Repeated DNA Sequences
- JAVA最常用的排序_冒泡排序、选择排序、快速排序
- Hadoop压缩方式
- Gridview的简单应用
- substring的一个易错点
- 使用Visual Studio cl编译的步骤
- Socket、Tcp、Udp、Http 知识点学习
- 2016 acm香港网络赛 F.Crazy Driver
- Android Studio中导入eclipse中的library库报错后的解决方案