2021-10-8做题

187. 重复的DNA序列

所有 DNA 都由一系列缩写为 'A''C''G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。

编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。

示例 1:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC","CCCCCAAAAA"]

示例 2:

输入:s = "AAAAAAAAAAAAA"
输出:["AAAAAAAAAA"]

提示:

  • 0 <= s.length <= 105
  • s[i] 为 'A''C''G' 或 'T'
     1 import java.util.ArrayList;
     2 import java.util.HashMap;
     3 import java.util.List;
     4 import java.util.Map;
     5 
     6 public class FindRepeatedDnaSequences {
     7     public List<String> findRepeatedDnaSequences(String s) {
     8         HashMap<String, Integer> map = new HashMap<>();
     9         List<String> strings = new ArrayList<>();
    10         if (s.length()<=10){
    11             return strings;
    12         }else{
    13             for (int i = 0; i <= s.length()-10; i++) {
    14                 String temp=s.substring(i,i+10);
    15                 if (map.containsKey(temp)){
    16                     map.put(temp,map.get(temp)+1);
    17                 }else{
    18                     map.put(temp,1);
    19                 }
    20             }
    21             for (Map.Entry<String, Integer> entry : map.entrySet()) {
    22                 if (entry.getValue()>1){
    23                     strings.add(entry.getKey());
    24                 }
    25             }
    26             return strings;
    27         }
    28     }
    29 
    30     public static void main(String[] args) {
    31         System.out.println(new FindRepeatedDnaSequences().findRepeatedDnaSequences("AAAAAAAAAAA"));
    32     }
    33 }

    长度小于10时,直接返回空数组。长度大于10时,遍历所有子串,利用hashmap判断该子串的次数,最后遍历hashmap,添加所有超过一次的子串到结果数组中。

上一篇:Spark分析sogou日志, RDD


下一篇:JAVA笔记-Date工具类