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     }

 

posted @ 2016-07-21 03:12  warmland  阅读(198)  评论(0编辑  收藏  举报