C++の特定の文字セットからの単語の可能性
この問題では、2つの文字列str1とstr2があります。私たちのタスクは、str2のすべての文字がstr1に存在するかどうかを確認することです。
問題を理解するために例を見てみましょう
入力 −
str1 = “Hello” str2 = “Hell”
出力 −はい
説明 −str2のすべての文字がstr1に存在します。
この問題を解決するための簡単な解決策は、str1のstr2の各文字をチェックしてから、解決策を返すことです。
しかし、効果的なソリューションを作成する必要があります。したがって、頻度配列(すべての有効な文字の長さ256)を使用してから、str1をトラバースし、対応する文字に基づいて頻度配列の値を発生よりも増やします。次に、str2をトラバースします。これにより、発生時に周波数配列が減少します。また、各反復で、この頻度が負になったかどうかも確認します。それが不可能な場合は可能です。
例
ソリューションの実装を示すプログラム
#include <iostream> #include <string.h> using namespace std; bool isPresent(string str1, string str2){ int freq[256] = { 0 }; for (int i = 0; i<str1.length(); i++) freq[str1[i]]++; for (int i=0;i<str2.length(); i++) { if (freq[str2[i]] < 1) return false; } return true; } int main() { string str1 = "tutorialspoint"; string str2 = "point"; cout<<"All charcters of '"<<str2<<"' are "; isPresent(str1,str2)?cout<<"present":cout<<"not present"; cout<<" in '"<<str1<<"' "; return 0; }
出力
All charcters of 'point' are present in 'tutorialspoint'
-
C++の特定のセットに存在するすべてのノードから到達可能なすべてのノードを検索します
1つの無向グラフと一連の頂点があるとします。与えられたセットに存在するすべての頂点から到達可能なすべてのノードを見つける必要があります。 したがって、入力が次のような場合 この場合、出力は[1,2,3]と[4,5]になります。これは、これらが2つの連結成分であるためです。 これを解決するには、次の手順に従います- ノード:=グラフ内のノードの数 訪問したサイズの配列を定義します:nodes+1。そして0で埋める 1つのマップを定義するm comp_sum:=0 iを初期化する場合:=0、i
-
C++で指定された開始文字からの最長の連続パスの長さを検索します
異なる文字のマトリックスが与えられます。 1つの文字から始めて、現在の文字よりも大きいすべての文字をトラバースすることにより、最長のパスを見つける必要があります。文字は互いに連続しています。 Eから始まります。 最長のパスを見つけるために、深さ優先探索アルゴリズムを使用します。 DFS中に、いくつかのサブ問題が複数回発生する場合があります。そのサブ問題の計算を何度も回避するために、動的計画法のアプローチを使用します。 例 #include<iostream> #define ROW 3 #define COL 3 using namespace std; // tool