187.求重复的DNA序列 C++实现LeetCode( 二 )
解法三:
class Solution {public:vector<string> findRepeatedDnaSequences(string s) {unordered_set<string> res;unordered_set<int> st;unordered_map<int, int> m{{'A', 0}, {'C', 1}, {'G', 2}, {'T', 3}};int cur = 0;for (int i = 0; i < 9; ++i) cur = cur << 2 | m[s[i]];for (int i = 9; i < s.size(); ++i) {cur = ((cur & 0x3ffff) << 2) | (m[s[i]]);if (st.count(cur)) res.insert(s.substr(i - 9, 10));else st.insert(cur);}return vector<string>(res.begin(), res.end());}};
如果不需要考虑节省内存空间 , 那可以直接将 10个 字符组成字符串存入 HashSet 中 , 那么也就不需要 mask 啥的了 , 但是思路还是跟上面的方法相同:
解法四:
class Solution {public:vector<string> findRepeatedDnaSequences(string s) {unordered_set<string> res, st;for (int i = 0; i + 9 < s.size(); ++i) {string t = s.substr(i, 10);if (st.count(t)) res.insert(t);else st.insert(t);}return vector<string>{res.begin(), res.end()};}};
到此这篇关于C++实现LeetCode(187.求重复的DNA序列)的文章就介绍到这了,更多相关C++实现求重复的DNA序列内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!
- 98k消音啥意思
- 野外迷路如何判断方向和求救
- 绝地求生喷子使用技巧
- 什么是行有不得反求诸己
- 丢雷技巧 绝地求生大神扔雷技巧
- 人人贷对贷款人有什么要求
- 1969甲类功放咋样求专家解释
- 全科医生报名时间及报名要求
- 水泥固化剂的使用方法
- 魔兽世界显卡要求有哪些
