重复的DNA序列
DNA序列 由一系列核苷酸組成,縮寫為 'A', 'C', 'G' 和 'T'.。
例如,"ACGAATTCCG"?是一個 DNA序列 。
在研究 DNA 時,識別 DNA 中的重復序列非常有用。
給定一個表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出現不止一次的 長度為 10 的序列(子字符串)。你可以按 任意順序 返回答案。
示例 1:
輸入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
輸出:["AAAAACCCCC","CCCCCAAAAA"]
示例 2:
輸入:s = "AAAAAAAAAAAAA"
輸出:["AAAAAAAAAA"]
示例代碼1: 【哈希表】
from collections import defaultdictclass Solution(object):def findRepeatedDnaSequences(self, s):l = 10dic = defaultdict(int)ans = []for i in range(len(s) - l + 1):res = s[i:i + l]dic[res] += 1if dic[res] == 2:ans.append(res)return anss = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" obj = Solution() ret = obj.findRepeatedDnaSequences(s) print(ret)思路分析:
- 使用哈希表統計 s?所有長度為 10的子串的出現次數,返回所有出現次數超過 10的子串。
- 代碼實現時,一邊遍歷子串一邊記錄答案,為了不重復記錄答案,只統計當前出現次數為 2?的子串。
復雜度分析:
- 時間復雜度:O(NL),其中 N?是字符串s 的長度,L=10即目標子串的長度。
- 空間復雜度:O(NL)。
示例代碼2:? 【滑動窗口】
class Solution(object):def findRepeatedDnaSequences(self, s):l = 10if len(s) < l:return []ans, window = set(), set()for i in range(len(s) - l + 1):tmp = s[i:i + l]if tmp not in window:window.add(tmp)else:ans.add(tmp)return list(ans)s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" s = "AAAAAAAAAAA" obj = Solution() ret = obj.findRepeatedDnaSequences(s) print(ret)總結
- 上一篇: android 蓝牙传输图片吗,如何使用
- 下一篇: C语言程序设计-多项式乘法系统模拟系统0