Q200510-02: 重复的DNA序列 程序解法

问题:  重复的DNA序列

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

编写一个函数来查找 DNA 分子中所有出现超过一次的 10 个字母长的序列(子串)。

示例:

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

程序:

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Solution {
    public List<String> findRepeatedSequences(String s){
        Map<String,Integer> map=new HashMap<String,Integer>();
        
        int endIndex=0;
        int length=s.length();
        for(int i=0;i<s.length();i++) {
            endIndex=i+10;
            if(endIndex>length) {
                break;
            }
            
            String sub=s.substring(i,endIndex);
            if(map.containsKey(sub)) {
                int value=map.get(sub)+1;
                map.put(sub, value);
            }else {
                map.put(sub, 1);
            }
        }
        
        List<String> retvalList=new ArrayList<String>();
        for(String key:map.keySet()) {
            int value=map.get(key);
            if(value>1) {
                retvalList.add(key);
            }
        }
        
        return retvalList;
    }
    
    
    public static void main(String[] args) {
        Solution slt=new Solution();
        List<String> ls=slt.findRepeatedSequences("AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT");
        for(String str:ls) {
            System.out.println(str);
        }
    }
}

输出:

AAAAACCCCC
CCCCCAAAAA

--2020年5月10日--

原文地址:https://www.cnblogs.com/heyang78/p/12864329.html