Leetcode 187.重复的DNA序列
重复的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序列相关推荐
- [LeetCode]187. 重复的DNA序列(java实现)暴力 + 哈希
[LeetCode]187. 重复的DNA序列(java实现) 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. ...
- Java实现 LeetCode 187 重复的DNA序列
187. 重复的DNA序列 所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对 ...
- LeetCode 187. 重复的DNA序列(哈希/位运算)
1. 题目 所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG". 在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助 ...
- LeetCode:187.重复的DNA序列解析
所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助. 编写一个函 ...
- LeetCode 187. 重复的DNA序列
思路: 先用Set存储每个以10为单位的字符串切片,若存在重复则加入List中, 时间复杂度O(N) 空间复杂度O(N) public List<String> findRepeatedD ...
- Leetcode 187. 重复的DNA序列 解题思路及C++实现
方法一:使用unordered_map,暴力解法 解题思路: 使用unordered_map<string, int>遍历字符串s,将每一个长度为10的子字符串计数,然后再遍历一次这个un ...
- 力扣 187. 重复的DNA序列
1.题目 DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.. 例如,"ACGAATTCCG" 是一个 DNA序列 . 在研究 DNA 时,识别 DN ...
- 187. 重复的DNA序列
class Solution:def findRepeatedDnaSequences(self, s: str) -> List[str]:res = []# 滑动窗口i = 0j = 10d ...
- 【字符串】重复的DNA序列
题目描述 DNA序列由一系列核苷酸组成,缩写为'A','C','G'和'T'. 例如,"ACGAATTCCG"是一个 DNA序列 . 在研究 DNA 时,识别 DNA 中的重复序列 ...
最新文章
- java基础===点餐系统
- Elasticsearch 冷热集群架构实战
- 吴恩达机器学习 -- 逻辑回归(Logistic Regression)
- NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
- python归并排序 分词_python实现归并排序,归并排序的详细分析
- 假如一种编程语言代表一个国家,哎哟,有意思了!
- Can’t Activate Reporting Services Service in SharePoint
- 国内程序员加班严重!听听外国网友怎么说。
- ppt手动放映怎么设置_一键解决PPT的动画播放和动画排序问题!
- 体力劳动和脑力劳动有什么区别?
- [LeetCode] #44 Wildcard Matching
- Git/mercurial...版本控制分支曲线图解析
- Oracle数据库游标使用大全
- 2022.08 VMware官网下载安装+配置Linux虚拟机,最新最全
- 嵌入式和单片机的区别是什么
- 华为设备配置基于MSDP的Anycast RP
- 简单制作弹球打砖块网页小游戏
- 留美学子安全手册,这个可以有
- css创始人层叠样式表,CSS层叠样式表
- 网络带宽单位转换 — MB/s、Mb/s、Mbps、Mbit/s、Kbps