187. Repeated DNA Sequences
题目描述
简单来说就是找出一个字符串中 所有重复一次以上 的长度为10的子串
Input: s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
Output: [“AAAAACCCCC”, “CCCCCAAAAA”]
解题思路
这种在长字符串中找字符串的题目, 要使用dictionary或者hashmap来保存数据, 因为检索效率高, 能有效降低时间复杂度. 也可以使用hashset, 特点是其中的元素不会重复.
代码
Python
class Solution:
def findRepeatedDnaSequences(self, s: str) -> List[str]:
if len(s) <= 10:
return []
dic = {}
for i in range(len(s)-9):
dic[s[i:i+10]] = dic.get(s[i:i+10], 0)+1
return [res for res in dic.keys() if dic[res] > 1]
Java
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
Set seen = new HashSet(), repeated = new HashSet();
for (int i = 0; i + 9 < s.length(); i++) {
String sub = s.substring(i, i + 10);
if (!seen.add(sub))
repeated.add(sub);
}
return new ArrayList(repeated);
}
}