重复的DNA序列

所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。

编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。

示例:

输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"

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

思路:将字符串中所有长度为10的子串以及出现的次数用map保存,但是需要消耗很大的空间。

考虑到只有4中可能的字符A,C,G,T;可以对字符进行编码,用2bit来表示一个字符,一个含有10个字符的子串只要20bit就能表示,用一个int类型就能表示。

总长度为n的字符串,可能的子串共有n-9种,因此最多用n-9个int就能表示所有的字符组合。最坏的情况下,20bit共有2^20中组合,即1024*1024,

一个int类型4byte,因此额外消耗4MB的二外空间。

 1 class Solution {
 2     public List<String> findRepeatedDnaSequences(String s) {
 3         List<String> list = new ArrayList<String>();
 4         if(s.length() < 10)    return list;
 5         Map<Integer, Integer> map = new HashMap<Integer, Integer>();
 6         for(int i=10; i<=s.length(); i++) {
 7             int result = 0;
 8             for(int j=i-10, k=0; j<i; j++,k++) {
 9                 char c = s.charAt(j);
10                 int num = 0;
11                 switch(c) {
12                     case 'A': num = 0; break;
13                     case 'C': num = 1; break;
14                     case 'G': num = 2; break;
15                     case 'T': num = 3; break;
16                 }
17                 result += (num << 2*(9-k));
18             }
19             if(map.containsKey(result) && map.get(result) == 0) {
20                 list.add(s.substring(i-10, i));
21                 map.put(result, 1);
22             } else if(!map.containsKey(result))
23                 map.put(result, 0);
24         }
25         return list;
26     }
27 }

转载于:https://www.cnblogs.com/kexinxin/p/10202996.html

Leetcode 187.重复的DNA序列相关推荐

  1. [LeetCode]187. 重复的DNA序列(java实现)暴力 + 哈希

    [LeetCode]187. 重复的DNA序列(java实现) 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. ...

  2. Java实现 LeetCode 187 重复的DNA序列

    187. 重复的DNA序列 所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对 ...

  3. LeetCode 187. 重复的DNA序列(哈希/位运算)

    1. 题目 所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG". 在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助 ...

  4. LeetCode:187.重复的DNA序列解析

    所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助. 编写一个函 ...

  5. LeetCode 187. 重复的DNA序列

    思路: 先用Set存储每个以10为单位的字符串切片,若存在重复则加入List中, 时间复杂度O(N) 空间复杂度O(N) public List<String> findRepeatedD ...

  6. Leetcode 187. 重复的DNA序列 解题思路及C++实现

    方法一:使用unordered_map,暴力解法 解题思路: 使用unordered_map<string, int>遍历字符串s,将每一个长度为10的子字符串计数,然后再遍历一次这个un ...

  7. 力扣 187. 重复的DNA序列

    1.题目 DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.. 例如,"ACGAATTCCG" 是一个 DNA序列 . 在研究 DNA 时,识别 DN ...

  8. 187. 重复的DNA序列

    class Solution:def findRepeatedDnaSequences(self, s: str) -> List[str]:res = []# 滑动窗口i = 0j = 10d ...

  9. 【字符串】重复的DNA序列

    题目描述 DNA序列由一系列核苷酸组成,缩写为'A','C','G'和'T'. 例如,"ACGAATTCCG"是一个 DNA序列 . 在研究 DNA 时,识别 DNA 中的重复序列 ...

最新文章

  1. java基础===点餐系统
  2. Elasticsearch 冷热集群架构实战
  3. 吴恩达机器学习 -- 逻辑回归(Logistic Regression)
  4. NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
  5. python归并排序 分词_python实现归并排序,归并排序的详细分析
  6. 假如一种编程语言代表一个国家,哎哟,有意思了!
  7. Can’t Activate Reporting Services Service in SharePoint
  8. 国内程序员加班严重!听听外国网友怎么说。
  9. ppt手动放映怎么设置_一键解决PPT的动画播放和动画排序问题!
  10. 体力劳动和脑力劳动有什么区别?
  11. [LeetCode] #44 Wildcard Matching
  12. Git/mercurial...版本控制分支曲线图解析
  13. Oracle数据库游标使用大全
  14. 2022.08 VMware官网下载安装+配置Linux虚拟机,最新最全
  15. 嵌入式和单片机的区别是什么
  16. 华为设备配置基于MSDP的Anycast RP
  17. 简单制作弹球打砖块网页小游戏
  18. 留美学子安全手册,这个可以有
  19. css创始人层叠样式表,CSS层叠样式表
  20. 网络带宽单位转换 — MB/s、Mb/s、Mbps、Mbit/s、Kbps

热门文章

  1. lock和wait+signal
  2. Project Euler 92:Square digit chains 平方数字链
  3. python标准模块os
  4. 读取Exchange的用户未读邮件数3种办法
  5. 玻璃体混浊研究中需要解决的问题(持续更新中)
  6. 拼多多4.5元手表使用功能图
  7. xfce4环境下gdm3更换背景图片
  8. 宽带651以及光猫红色灯闪烁-故障维修
  9. hexo的landfarz主题侧栏靠左
  10. Python图像处理工具——PIL、opencv、matplotlib