当前位置: 首页 > news >正文

leetcode0187. 重复的DNA序列-medium

1 题目:重复的DNA序列

官方标定难度:中

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

例如,“ACGAATTCCG” 是一个 DNA序列 。
在研究 DNA 时,识别 DNA 中的重复序列非常有用。

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

示例 1:

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

示例 2:

输入:s = “AAAAAAAAAAAAA”
输出:[“AAAAAAAAAA”]

提示:

0 < = s . l e n g t h < = 10 5 0 <= s.length <= 10^5 0<=s.length<=105
s[i]==‘A’、‘C’、‘G’ or ‘T’

2 solution

直接用 map 统计每一个长度为 10 的子串,然后返回重复 2 次以上的

代码

class Solution {
public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;unordered_map<string, int> map;for (int i = 0; i + 9 < s.size(); i++) {string t = s.substr(i, 10);map[t]++;if(map[t]==2) ans.push_back(t);}return ans;}
};

结果

在这里插入图片描述

3 进阶

直接将长度为 10 的串映射成一个整数

代码

class Solution {
public:vector<string> findRepeatedDnaSequences(string s) {unordered_map<char, int> f = {{'A', 0},{'C', 1},{'G', 2},{'T', 3}};int t = 0;for (int i = 0; i < 9; i++) t = t * 4 + f[s[i]];unordered_map<int, int> map;int N = 1 << 18;vector<string> ans;for (int i = 9; i < s.size(); i++) {t = t % N * 4 + f[s[i]];map[t]++;if (map[t] == 2) ans.push_back(s.substr(i - 9, 10));}return ans;}
};

结果

在这里插入图片描述

相关文章:

  • 【Linux】基于策略模式的简单日志设计
  • Rokid AR交互开发工具对比
  • 怎么优化MySQL中的索引
  • MIT线性代数第三讲笔记
  • [笔记] 基于esp32s3用GUI-Guider-1.9.1-GA开发LVGL界面
  • UI学习汇总
  • LiteRT-LM边缘平台上高效运行语言模型
  • 第10章:Neo4j与其他技术集成
  • 第8章:Neo4j性能优化
  • 在虚拟机 银河麒麟|ubuntu 中安装和配置NVIDIA显卡驱动
  • 【运维系列】【ubuntu22.04】Docker安装mysql 8.0.36 教程
  • 基于大模型预测缺铁性贫血的综合技术方案大纲
  • 【系统分析师】2011年真题:案例分析-答案及详解
  • UE5错误 Linux离线状态下错误 circular dependency detected;includes/requires
  • 基于MediaPipe的手指目标跟踪与手势识别+人体姿态识别估计:MediaPipe与OpenPose算法对比
  • 第11章:Neo4j实际应用案例
  • LangChain智能体之initialize_agent开发实战深度解析
  • YOLOv11改进 | 注意力机制篇 | SENetV1与C2PSASENet融合策略
  • JavaScript 数据结构详解
  • 【计算机常识:Windows】--CMD命令详解
  • 南阳网站开发公司/郑州seo使用教程
  • 赣州做网站多少钱/怎么做网站宣传
  • 做新闻微网站有哪些/邯郸seo排名
  • 有了虚拟主机怎么做网站/seo技术分享博客
  • 惠阳有做公司网站的吗/北京疫情最新消息情况
  • 武汉网站建设培训/上海有名网站建站开发公司