2021-10-08

  1. 重复的DNA序列
    所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。
    编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。
    提示:
    0 <= s.length <= 105
    s[i] 为 ‘A’、‘C’、‘G’ 或 ‘T’

示例 1:
输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
输出:[“AAAAACCCCC”,“CCCCCAAAAA”]

示例 2
输入:s = “AAAAAAAAAAAAA”
输出:[“AAAAAAAAAA”]
解析过程:
1.ArrayList特点:
有序:按照添加的顺序
不唯一:同一个元素可以装多次
如何创建泛型对象:ArrayList<泛型> list=new ArrayList<>();
2. getOrDefault(key,default):若存在相应的key,则返回其对应的value,否则返回给定的默认值。
需要统计一个字符串中所含的字母及对应字母的个数:key的值相同,使value的值加1。
方法:
1)定义一个哈希表hm
2)hm.put(key,hm.getOrDefault(key,0)+1);
若没有就是0,若有就是原有值增1
3.Map集合
1)添加功能
V put(K key,V value):添加元素。
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
2)获取功能
V get(Object key):根据键获取值
4. substring():substring 方法用于提取字符串中介于两个指定下标之间的字符。
  语法

stringObject.substring(i,j);

思路:设置目标子串的长度为定值,判断hm中的内容s1是否有超过1个的,若有,则加入集合str中,最后返回str即可。

class Solution {
    public List<String> findRepeatedDnaSequences(String s) {
        int length=10;
        List<String> str=new ArrayList<>();
        Map<String,Integer> hm=new HashMap<String,Integer>();
        int l=s.length();
        for(int i=0;i<=l-length;++i){
            String s1=s.substring(i,i+length);
            hm.put(s1,hm.getOrDefault(s1,0)+1);
            if(hm.get(s1)==2){
               str.add(s1);
            }
        }
        return str;
    }
}

结果:
执行用时:23 ms, 在所有 Java 提交中击败了22.89%的用户
内存消耗:47 MB, 在所有 Java 提交中击败了37.34%的用户
通过测试用例:31 / 31

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值