leetCode_187. 重复的DNA序列


前言

看到昨天的大佬们说国庆完了以后的每日一题会变难,把我吓得,结果今天这道题也还好呀!做完了的我来打卡来啦,嘿嘿嘿!那么国庆过后开学的第一天的你或者上班的你有Fighting吗?冲呀!


打卡界面
打卡界面

原题题目

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

原题案例

案例截图

题目分析

今天的这道题,我开始看到的时候其实是有一点点懵的,因为我不是很清楚DNA是什么,我第一遍看完题目并不是很通透,但我大概知道它的目的就是要找出连续10个字符连接起来重复出现的数组,于是我的第一反应是和10月三日的小数部分循环一样,但是当时我是通过余数一样时找出来的呀,这个字符串怎们弄呢,我就有头脑一热,用集合,将每10个字符组成的一个字符串保存到集合里面,最后在通过集合内部比较,出现相同的数据就提出来,保存到另一个集合里面,可是这样比较我又觉得太麻烦了,我看了一眼这个题目是一道中等难度的题,那么我如果这样做,我的时间复杂度在80%以上的概率会超过时间限制,于是我想到了用两个HashSet集合保存,因为HashSet集合不会保存相同的元素,所以当第一个集合不保存时,第二个集合就来保存,通过第二个集合的去重后将出现果的数据保存下来,就是我们这道题最终的解法了。

代码展示

public List<String> findRepeatedDnaSequences(String s) {
        List<String> ls = new ArrayList<String>();
        int len = s.length();
        //必须大于10个,等于10个就只出现了一次,返回为空
        if(len <= 10){
            return ls;
        }
        Set<String> set1 = new HashSet<String>();
        Set<String> set2 = new HashSet<String>();
        for(int i = 0; i<=len-10; i++){
            String res = s.substring(i,i+10);
            //由于hashset集合不会重复添加,所以set1集合不会添加重复的元素
            if(!set1.add(res)){
                //当set1添加过后,在利用set2去一次重,不会出现重复的元素
                if(set2.add(res)){
                    //两次筛选过后最后添加元素到我们的集合之中,🆗
                    ls.add(res);
                }
            }
        }
        return ls;
    }

LeetCode运行结果截图
运行结果
Ps:每日一句毒鸡汤:等自己为人父为人母了,才理解他们当初是多么努力…抑制住自己想掐死你的冲动……

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值