187. Repeated DNA Sequences | Java最短代码实现
来源:互联网 发布:电锯惊魂公仔淘宝 编辑:程序博客网 时间:2024/06/15 21:29
原题链接:187. Repeated DNA Sequences
【思路】
本题考查hashmap和位运算的综合。我们首先来看字母 ”A" "C" “G" "T" 的ASCII码,分别是65, 67, 71, 84,二进制表示为 1000001, 1000011, 1000111, 1010100。可以看到红色部分2bit 就可以区分不同的字符。那么一共需要2 × 10 = 20bit,用第21 - 1位就可以存储10个字母,然后把这20位值转化为int作为hashmap的key,来判断该字符是否出现过:
public List<String> findRepeatedDnaSequences(String s) { List<String> result = new ArrayList<String>(); HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); int key = 0; for (int i = 0; i < s.length(); i++) { key = ((key << 2) | (s.charAt(i) & 0x6)) & 0x1fffff; if (i < 9) continue; if (map.get(key) == null) { //以前未出现过该字符串 map.put(key, 1); } else if (map.get(key) == 1) { //该字符串已出现过一次 result.add(s.substring(i - 9, i + 1)); map.put(key, 2); //标记该字符串出现超过一次 } } return result; }
30 / 30 test cases passed. Runtime: 49 ms Your runtime beats 32.71% of javasubmissions.
欢迎优化!
1 0
- 187. Repeated DNA Sequences | Java最短代码实现
- Repeated DNA Sequences (Java)
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 187. Repeated DNA Sequences
- 打开UltraEdit,提示 “文件可能不是DOS格式”
- 文章标题
- AT&T汇编enter、leave、call、ret指令
- 修改button的text
- 排序问题
- 187. Repeated DNA Sequences | Java最短代码实现
- Inter asm 与 AT&T asm 比较
- 灰度图像的加权平均平滑算法
- 如何配置Apache虚拟主机?(基于IP、基于端口、基于域名)
- 使用scp命令拷贝远程windows系统下的文件到liunx下
- Android即时通讯中的表情的定义和使用
- rxjava 和reftofit结合的两个文章
- Caffe解惑:caffe中的前传和反传是如何确定的?
- 工作中的记录(一)