187. Repeated DNA Sequences
建一个set, 是曾经遇到过的长度为10的string,然后对这个sample string从头到尾走一遍,如果曾经看到,那么就加到repeated set里,最后返回由repeated string组成的arrayList<String>里面。
之所以repeated也需要一个自己的set,因为有的重复序列可能出现好几次,但是只需要返回一个
值得注意的细节是:
1. 可以由一个Set直接创建一个ArrayList
2.如果set里面已经有该元素,那么添加这个元素的时候会返回false
1 public List<String> findRepeatedDnaSequences(String s) { 2 if(s == null || s.length() <= 10) { 3 return new ArrayList<String>(); 4 } 5 int len = s.length(); 6 Set<String> seen = new HashSet<String>(); 7 Set<String> repeated = new HashSet<String>(); 8 int start = 0; 9 while(start + 10 <= len) { 10 String sub = s.substring(start, start + 10); 11 if(!seen.contains(sub)) { 12 seen.add(sub); 13 } else { 14 repeated.add(sub); 15 } 16 start++; 17 } 18 return new ArrayList<String>(repeated); 19 }
可以简化一下
1 public List<String> findRepeatedDnaSequences(String s) { 2 if(s == null || s.length() <= 10) { 3 return new ArrayList<String>(); 4 } 5 Set<String> seen = new HashSet<String>(); 6 Set<String> repeated = new HashSet<String>(); 7 for(int i = 0; i + 10 <= s.length(); i++) { 8 String sub = s.substring(i, i+10); 9 if(!seen.add(sub)) { 10 repeated.add(sub); 11 } 12 } 13 return new ArrayList<String>(repeated); 14 }