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

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;}
};

结果

在这里插入图片描述

http://www.xdnf.cn/news/14451.html

相关文章:

  • 用Jmeter进行接口测试
  • sql解析,日期 trunc sysdate
  • LangChain智能体之initialize_agent开发实战深度解析
  • 【完整教程】WSL发行版迁移到D盘
  • 【Block总结】NeLU(负斜率线性单元)函数|最新激活函数|独家复现|即插即用
  • 【AI论文】Saffron-1:LLM安全保证的推理缩放范例
  • Redis 6.2.6 安装教程 - 从源码编译到配置启动(Linux环境)
  • 本地访问远程vps中的sqlite数据库中的内容之(二)使用Python和web访问远程sqlite
  • 构建esp-IDF出现的(Git仓库所有权检测)问题
  • linux thermal framework(4)_thermal governor
  • 安卓9.0系统修改定制化____安卓9.0系统精简 了解系统app组件构成 系统app释义 常识篇 一
  • Leetcode 刷题记录 13 —— 图论
  • Qdrant向量数据库的增删改查
  • Java + Spring Boot 后端防抖实现方案
  • nrf52811墨水屏edp_service.c文件学习
  • YOLO优化之双池化下采样融合块、注意力引导逆残差块
  • 【学习笔记】深入理解Java虚拟机学习笔记——第6章 类文件结构
  • CppCon 2016 学习: std::accumulate EXPLORING AN ALGORITHMIC EMPIRE
  • ubuntu 22.04 安装部署elasticsearch 7.10.0详细教程
  • Linux服务器入门教程
  • React forwardRef 与 useImperativeHandle 深度解析
  • LangGraph 深度应用指南:构建下一代Agent系统
  • 使用VSCode开发MCU,FreeRTOS进Hard_Fault调试
  • JVM——JVM中的扩展之道
  • 基于二进制XOR运算的机器人运动轨迹与对称图像自动生成算法
  • 基于深度学习的智能交通流量预测系统:技术与实践
  • 批量下载图片小工具
  • 【项目实训】【项目博客#07】HarmonySmartCodingSystem系统前端开发技术详解(5.12-6.15)
  • 寄存器的使用
  • Number.toFixed() 与 Math.round() 深度对比解析