zoukankan      html  css  js  c++  java
  • Repeated DNA Sequences

    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 = "AAAAACCCCCAAAAACCCCCAAAAAGGGTTT",
    
    Return:
    ["AAAAACCCCC", "CCCCCAAAAA"].


    这题其实挺简单的:
    1.[AAAAAAAAAAAA] 也有[AAAAAAAAAA]作为return。 substrings之间可以overlap;
    2.其实就是怎么对一个length=10的string找一个hashcode。(如果hashmap 以string 为key, 则out of memory)
    再就是 如果每次去算hashcode的时候 用substring 算 也会ofm。。。。

     1 public class Solution {
     2     public List<String> findRepeatedDnaSequences(String s) {
     3         List<String> result = new ArrayList<String>();
     4         if(s == null || s.length() < 10) return result;
     5         HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
     6         Integer val = 0;
     7         for(int i = 0; i < 10; i ++){
     8             val = val << 2;
     9             val |= toInt(s.charAt(i));
    10         }
    11         map.put(val, 1);
    12         for(int i = 10; i < s.length(); i ++){
    13             val = ((val & 0x3ffff) << 2) | toInt(s.charAt(i));
    14             if(map.containsKey(val)) map.put(val, map.get(val) + 1);
    15             else map.put(val, 1);
    16         }
    17         for(Integer v : map.keySet())
    18             if(map.get(v) > 1) result.add(toDNA(v));
    19         return result;
    20     }
    21     
    22     private Integer toInt(char c){
    23         if(c == 'A') return 0;
    24         else if(c == 'C') return 1;
    25         else if(c== 'G') return 2;
    26         else return 3;//T
    27     }
    28     
    29     private String toDNA(Integer i){
    30         StringBuilder sb = new StringBuilder();
    31         for(int j = 0; j < 10; j ++){
    32             int tmp = i % 4;
    33             i = i / 4;
    34             char c = 'T';
    35             if(tmp == 0) c = 'A';
    36             else if(tmp == 1) c = 'C';
    37             else if(tmp == 2) c ='G';
    38             sb.insert(0, c);
    39         }
    40         return sb.toString();
    41     }
    42 }


  • 相关阅读:
    css的三种方法以及优先级说明
    form表单中的label标签
    html 中 a 标签 mailto的用法
    Hexo + GitHub Pages搭建博客
    Sublime Text3使用指南
    IMU数据融合:互补,卡尔曼和Mahony滤波
    正点原子STM32探索者学习笔记4
    正点原子STM32探索者学习笔记3
    正点原子STM32探索者学习笔记2
    正点原子STM32探索者学习笔记1
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/4277311.html
Copyright © 2011-2022 走看看