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序列内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!