leetcode-每日一题2021.10.8 重复的DNA序列

题目

力扣

思路一 哈希表

建立10位字符子串和该子串出现个数的哈希表,如果次数为2就push进数组。

代码一

class Solution {
    const int L = 10;
public:
    vector findRepeatedDnaSequences(string s) {
        vector ans;
        unordered_map cnt;
        int n = s.length();
        for (int i = 0; i <= n - L; ++i) {
            string sub = s.substr(i, L);
            if (++cnt[sub] == 2) {
                ans.push_back(sub);
            }
        }
        return ans;
    }
};

思路二 哈希表+滑动窗口+位运算

一共有四种可能出现的字符,每个字符可以用两个二进制位表示,int有32个二进制位,所以可以用一个int型数据表示10个字符。加入一个新字符的操作:先将现在的数据左移两位,在和这个新字符做与操作,再只截取后20位。

代码二

class Solution {
    const int L=10;
    unordered_map bin={{'A',0},{'C',1},{'G',2},{'T',3}};
public:
    vector findRepeatedDnaSequences(string s) {
        int n=s.length(),x=0;
        unordered_map cnt;
        vector v;
        if(n<=L)
            return v;
        for(int i=0;i

你可能感兴趣的:(leetcode,leetcode,算法)