虽然做出来了,但是超出时间限制了,就不知道该怎么改进。
超出时间限制如下:
class Solution: def findRepeatedDnaSequences(self, s: str) : if len(s) <= 10 : return [] res = [] i = 0 while i < len(s)-10: #print(s.count(s[i:i+1])) if s[i+1:].count(s[i:i+10]) > 0: if s[i:i+10] not in res: res.append(s[i:i+10]) i += 1 else: i += 1 else: i += 1 return res
看了别人的答案做法,,,
解法一:布尔字典:
class Solution: def findRepeatedDnaSequences(self, s: str) -> List[str]: d = {} for i in range(len(s) - 9): if s[i: i + 10] in d: d[s[i: i + 10]] = True else: d[s[i: i + 10]] = False return [i for i in d if d[i]]
好巧妙啊!!!!!!!
鼓掌!!!!!!!!!!
解法二:计数字典
class Solution: def findRepeatedDnaSequences(self, s: str) -> List[str]: d = collections.Counter(s[i: i + 10] for i in range(len(s) - 9)) return filter(lambda i: d[i] > 1, d)

解法三:整型字典
class Solution: def findRepeatedDnaSequences(self, s: str) -> List[str]: d = collections.defaultdict(int) for i in range(len(s) - 9): d[s[i: i + 10]] += 1 return [i for i in d if d[i] > 1]
class Solution: def findRepeatedDnaSequences(self, s: str) -> List[str]: tmp, ans = set(), set() for i in range(len(s) - 9): if s[i: i + 10] not in tmp: tmp.add(s[i: i + 10]) elif s[i:i + 10] not in ans: ans.add(s[i: i + 10]) return list(ans)
原文:https://www.cnblogs.com/taoyuxin/p/11714734.html