C++setの応用

2370 ワード

テーマ1出所牛客網:https://www.nowcoder.com/questionTerminal/ab900f183e054c6d8769f2df977223b5
タイトル2ソース牛客網:https://www.nowcoder.com/profile/42483351/codeBookDetail?submissionId=46621727
まずsetコンテナの使い方(キー一意)を理解します.
タイトルの説明
牛はまた生物科学研究者から一つの任務を得た.今回、牛は科学研究者がDNA配列sからDNA配列sに現れていないDNA断片の最短の長さを見つけるのを助ける必要がある.例えば、s=AGGTCTAシーケンスには、すべての長さが1の('A','C','G','T')フラグメントが含まれているが、長さが2のフラグメントはすべて含まれていない.例えば、シーケンスには「AA」が含まれていないので、出力2である.
説明を入力:
         s,     length(1 ≤ length ≤ 2000),     'A','C','G','T'     。

出力の説明:
       ,        DNA  s  DNA     。

例1
入力
コピー
AGGTCTA

しゅつりょく
コピー
2

 
 
回答:
まずsetコンテナの使い方(キー一意)を理解します.
それぞれの長さnには2^n種の可能性がある.例えば長さが1の場合(A,C,G,T)の4種類がある.n=2で16種類.
例えば、長さ2のシーケンスは、(AA, AG, AC, AT, CA, CC, CG, CT ……..)を含み、すべてを判断しなければならない.(AA, CC, GG TT)と判断すれば良いわけではありません.
 
次に,入力列のうち長さnのサブ列が何種類あるかを探し,数が2^n個未満であればnを出力すればよい.コードは次のとおりです.
# include
# include
# include
# include
# include
# include
using namespace std;

int main(){
	string str;
	cin>>str;
	int len=str.size();
	for(int i=1;i<=len;i++){
		set map;
		for(int j=0;j

タイトルの説明
隣接する文字列のすべての組合せを出力する文字列を入力します.例を挙げると、abcが入力されると、その組み合わせはa、b、c、ab、bc、abcである.(注意:出力の組み合わせは重量を落とす必要があります)(40点)
説明を入力:
     

出力の説明:
  ,         ,               ,   。

例1
入力
コピー
bac

しゅつりょく
コピー
a b c ac ba bac
# include
# include
# include
# include
# include
# include
# include
# include
using namespace std;


int main(){
	string s;
	cin>>s;
	set se;//set 
	set::iterator it;//set   
	int len=s.length(); 
	for(int i=1;i<=len;i++){
		for(int j=0;j+i-1