题目:
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"].分析1(推荐):
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
//给定字符串,返回由其中10个字符组成的重复
//思路:使用两个HashSet实现
List<String> list=new ArrayList<>();
if(s.length()<10)return list;
Set<String> set1=new HashSet<>(),set2=new HashSet<>();
for(int i=0;i<s.length()-9;i++){
String str=s.substring(i,i+10);
if(!set1.add(str)){
//没有添加成功说明存在相同的,用set2来存储,类似两级存储,而set2不会重复存储元素
set2.add(str);
}
}
list=new ArrayList(set2);
return list;
}
}
分析2(易理解):
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
//给定字符串,返回由其中10个字符组成的重复
List<String> list=new ArrayList<>();
if(s.length()<10){
return list;
}
HashMap<String,Integer> hm=new HashMap<String,Integer>();
for(int i=0;i<s.length()-9;i++){
String str=s.substring(i,i+10);
if(hm.containsKey(str)){
int newValue=hm.get(str)+1;
hm.put(str,newValue);
}else{
hm.put(str,1);
}
}
//遍历HashMap(方式1)
//Map.Entry(K,V)是Map下的一个接口
// for(Map.Entry<String,Integer> entry:hm.entrySet()){
// if(entry.getValue()>1){
// list.add(entry.getKey());
// }
// }
//遍历HashMap(方式2)
for(String key:hm.keySet()){
if(hm.get(key)>1){
list.add(key);
}
}
return list;
}
}