设为首页 加入收藏

TOP

LeetCode-Repeated DNA Sequences
2015-11-21 01:03:51 来源: 作者: 【 】 浏览:2
Tags:LeetCode-Repeated DNA Sequences

?

All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: ACGAATTCCG. When studying DNA, it is sometimes useful to identify repeated sequences within the DNA.

Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.

For example,

Given s = AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT,

Return:
[AAAAACCCCC, CCCCCAAAAA].
解题报告:标准字符转二进制的hash table。直接用string进行存储会内存超时。

采用( s[i] - 'A' + 1 ) % 5 )把A,C,G,T,转换为1,3,2,0;t = ( (t<<2) & 0xfffff) | ( ( s[i] - 'A' + 1 ) % 5 );进行20位的存贮。

?

class Solution {
public:
    vector
  
    findRepeatedDnaSequences(string s) {
        vector
   
     result; unordered_map
    
      str; unordered_map
     
      ::iterator it; int t; for (int i = 0; i < s.size() ;i++) { t = ( (t<<2) & 0xfffff) | ( ( s[i] - 'A' + 1 ) % 5 ); if (i < 9) continue; it = str.find(t); if (it == str.end()) str[t] = 1; else { if (str[t] == 1) { str[t] = 2; result.push_back(s.substr(i-9,10)); } } } return result; } };
     
    
   
  

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 题目1753 Flip Game(DFS) 下一篇算法学习 - 动态规划(DP问题)(C++)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: