题目
https://leetcode.com/problems/repeated-dna-sequences/
解题思路
题目意思是:找出出现超过一次的且长度为10的子字符串。
我的第一种做法是遍历一次字符串,然后用str.find()去判断子字符串是否出现第二次,但是出现Time Limit Exceeded。
第二种做法同样是遍历一次,但是改成写入字典的方式,最后筛出大于1次的子字符串即可。
用str.find()去查找的时间复杂度是O(n),而字典查找则是O(1),所以后者更快。
代码
解法一(Time Limit Exceeded):
class Solution(object):
def findRepeatedDnaSequences(self, s):
"""
:type s: str
:rtype: List[str]
"""
res = []
for i in range(len(s)-10):
if s[i:i+10] in res:
continue
if s[i+1:].find(s[i:i+10]) >= 0:
res.append(s[i:i+10])
return res
解法二(AC):
class Solution(object):
def findRepeatedDnaSequences(self, s):
"""
:type s: str
:rtype: List[str]
"""
res = []
d = {}
for i in range(len(s)-9):
key = s[i:i+10]
if key not in d:
d[key] = 1
else:
d[key] += 1
for k in d:
if d[k] > 1:
res.append(k)
return res