【教3妹学编程-算法题】重复的DNA序列

3妹 :"太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包"
2哥 :3妹,什么事呀这么开心呀。
3妹 :2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。
2哥 :是啊,都快立冬了,天气还是这么热。今年的冬天比以往来的要晚一些。
3妹 :晚来也是要来的,看天气预报 下周要降温,估计没几天这种暖的天气了。
2哥 :注意保暖啊3妹,看你们女生还穿着裙子,不能只要美丽,就冻人啊。
3妹 :我才不,天冷了我就穿秋裤,卷死她们。
2哥:说到卷她们,不如做一道题,在技术上卷死她们。 内外兼修~

题目:

DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。

例如,"ACGAATTCCG" 是一个 DNA序列 。

在研究 DNA 时,识别 DNA 中的重复序列非常有用。

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

示例 1:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"

输出:["AAAAACCCCC","CCCCCAAAAA"]

示例 2:

输入:s = "AAAAAAAAAAAAA"

输出:["AAAAAAAAAA"]

提示:

0 <= s.length <= 105

s[i]=='A'、'C'、'G' or 'T'

思路:

哈希表

我们可以用一个哈希表统计 s 所有长度为 10 的子串的出现次数,返回所有出现次数超过 10 的子串。

代码实现时,可以一边遍历子串一边记录答案,为了不重复记录答案,我们只统计当前出现次数为 2 的子串。

java代码:

复制代码
class Solution {
    static final int L = 10;

    public List<String> findRepeatedDnaSequences(String s) {
        List<String> ans = new ArrayList<String>();
        Map<String, Integer> cnt = new HashMap<String, Integer>();
        int n = s.length();
        for (int i = 0; i <= n - L; ++i) {
            String sub = s.substring(i, i + L);
            cnt.put(sub, cnt.getOrDefault(sub, 0) + 1);
            if (cnt.get(sub) == 2) {
                ans.add(sub);
            }
        }
        return ans;
    }
}
相关推荐
Nebula_g1 小时前
C语言应用实例:背包DP1(Bone Collector、Piggy-Bank、珍惜现在,感恩生活)
算法
roman_日积跬步-终至千里1 小时前
【模式识别与机器学习(5)】主要算法与技术(中篇:概率统计与回归方法)之逻辑回归(Logistic Regression)
算法·机器学习·回归
Promise4856 小时前
贝尔曼公式的迭代求解笔记
笔记·算法
福尔摩斯张7 小时前
Linux进程间通信(IPC)机制深度解析与实践指南
linux·运维·服务器·数据结构·c++·算法
你好~每一天7 小时前
未来3年,最值得拿下的5个AI证书!
数据结构·人工智能·算法·sqlite·hbase·散列表·模拟退火算法
杰克尼8 小时前
3. 分巧克力
java·数据结构·算法
zmzb01038 小时前
C++课后习题训练记录Day39
数据结构·c++·算法
Ayanami_Reii9 小时前
进阶数学算法-取石子游戏(ZJOI2009)
数学·算法·游戏·动态规划·区间dp·博弈论
一只小小汤圆9 小时前
已知圆弧的起点、终点、凸度 求圆弧的圆心
算法
丸码9 小时前
Java HashMap深度解析
算法·哈希算法·散列表