C++で繰り返されるDNA配列
DNA分子に複数回出現する10文字の長さのシーケンス(サブストリング)をすべて見つけるには、1つのメソッドを作成する必要があります。
したがって、入力が「AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT」の場合、出力は["AAAAACCCCC"、"CCCCCAAAAA"]になります。
これを解決するには、次の手順に従います-
-
配列ret、n:=sのサイズを定義し、visitedとvisited2という2つのセットを作成します
-
bitValというマップを定義します。
-
0123などのACGTに対応する値をbutValに保存します。
-
マスク:=0
-
0からn–1の範囲のiの場合
-
マスク:=マスク* 4
-
マスク:=マストまたはbitVal [s [i]]
-
マスク:=マスクとFFFFF
-
i <9の場合は、次の反復に進みます
-
部分文字列フォームインデックスi–9から9をretに挿入します
-
マークをvisited2に挿入します。
-
-
訪問者にマスクを挿入
-
-
retを返す
例(C ++)
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } typedef long long int lli; class Solution { public: vector<string>findRepeatedDnaSequences(string s) { vector <string> ret; int n = s.size(); set <int> visited; set <int> visited2; map <char, int> bitVal; bitVal['A'] = 0; bitVal['C'] = 1; bitVal['G'] = 2; bitVal['T'] = 3; lli mask = 0; for(int i = 0; i < n; i++){ mask <<= 2; mask |= bitVal[s[i]]; mask &= 0xfffff; if(i < 9) continue; if(visited.count(mask) && !visited2.count(mask)){ ret.push_back(s.substr(i - 9, 10)); visited2.insert(mask); } visited.insert(mask); } return ret; } }; main(){ Solution ob; print_vector(ob.findRepeatedDnaSequences("AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT")); }
入力
"AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
出力
[AAAAACCCCC, CCCCCAAAAA, ]
-
C++で文字列の最初に存在する繰り返し文字を検索します
文字列があるとします。繰り返される最初の文字を見つける必要があります。文字列は「HelloFriends」なので、最初に繰り返される文字はlになります。次々と2つのlがあるので。 これを解決するために、ハッシュ手法を使用します。ハッシュテーブルを1つ作成し、各文字を1つずつスキャンします。文字が存在しない場合はハッシュテーブルに挿入し、すでに存在する場合はその文字を返します。 例 #include<iostream> #include<unordered_set> using namespace std; char getFirstRepeatingChar(stri
-
LinuxでのC++の最高のIDEは何ですか?
大きなプロジェクトは、単なるテキストエディタでは管理が困難です。このような場合にIDEを使用すると、生産性が向上し、フラストレーションが軽減される可能性があります。 IDEにはさまざまな種類があり、ニーズに合ったものを選択する必要があります。 Linux上のC++に最適なIDEは1つではありません。ツールは賢く選ぶ必要があります。 Linux用の人気のあるIMOの最高のIDEのリストは次のとおりです。 C /C++開発用のNetbeans- Netbeansは、C /C++および他の多くのプログラミング言語向けの無料のオープンソースで人気のあるクロスプラットフォームIDEです。コミュニテ