C++のエイリアン辞書
新しい異星言語があり、それがラテンアルファベットを使用していると仮定します。ただし、文字間の順序は不明です。辞書にある空でない単語のリストがあります。これらの単語は、この新しい言語の規則に従って辞書式に並べ替えられています。この言語の文字の順序を見つける必要があります。
したがって、入力が["wrt"、 "wrf"、 "er"、 "ett"、 "rftt"]の場合、出力は "wertf"
になります。これを解決するには、次の手順に従います-
-
次数と呼ばれる1つのマップを定義します
-
グラフと呼ばれる1つのマップを定義する
-
n:=単語のサイズ
-
初期化i:=0の場合、i <単語のサイズの場合、更新(iを1増やします)、実行-
-
初期化j:=0の場合、j
-
度[単語[i、j]]:=0
-
-
-
初期化i:=0の場合、i
-
l:=単語の最小サイズ[i]と単語のサイズ[i + 1]
-
初期化j:=0の場合、j
-
x:=words [i、j]
-
y:=words [i + 1、j]
-
xがyと等しくない場合、-
-
グラフの最後にyを挿入します[x]
-
(次数[y]を1増やします)
-
ループから出てきます
-
-
-
-
ret:=空白の文字列
-
1つのキューを定義するq
-
キーと値のペアごとに、次のように実行します-
-
その値が0と同じ場合、-
-
そのキーをqに挿入します
-
-
-
(qが空ではない)間、-
-
x:=qの最初の要素
-
qから要素を削除
-
ret:=ret + x
-
グラフに配置されている要素ごとに-
-
度[座る]を1つ減らす
-
degree [sit]が0と同じ場合、-
-
挿入座りをqに挿入
-
-
(座る回数を1つ増やします)
-
-
-
return(retのサイズがdegreeのサイズと同じ場合は、ret、それ以外の場合は空白の文字列)
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: string alienOrder(vector<string>& words) { map<char, int> degree; map<char, vector<char> > graph; int n = words.size(); for (int i = 0; i < words.size(); i++) { for (int j = 0; j < words[i].size(); j++) { degree[words[i][j]] = 0; } } for (int i = 0; i < n - 1; i++) { int l = min((int)words[i].size(), (int)words[i + 1].size()); for (int j = 0; j < l; j++) { char x = words[i][j]; char y = words[i + 1][j]; if (x != y) { graph[x].push_back(y); degree[y]++; break; } } } string ret = ""; queue<char> q; map<char, int>::iterator it = degree.begin(); while (it != degree.end()) { if (it->second == 0) { q.push(it->first); } it++; } while (!q.empty()) { char x = q.front(); q.pop(); ret += x; vector<char>::iterator sit = graph[x].begin(); while (sit != graph[x].end()) { degree[*sit]--; if (degree[*sit] == 0) { q.push(*sit); } sit++; } } return ret.size() == degree.size() ? ret : ""; } }; main(){ Solution ob; vector<string> v = {"wrt","wrf","er","ett","rftt"}; cout <<(ob.alienOrder(v)); }
入力
{"wrt","wrf","er","ett","rftt"}
出力
wertf
-
C++のn-aryツリーの偶数サイズのサブツリー
この問題では、n-aryツリーを示す隣接リストが与えられます。私たちのタスクは、n-aryツリー内の偶数サイズのサブツリーの数を見つけることです。 N-aryツリー は、通常、次のように階層的に表されるノードのコレクションとして定義されます。 ツリーはルートノードで開始されます。 ツリーの各ノードは、その子ノードへのポインタのリストを維持します。 子ノードの数がm以下です。 問題を理解するために例を見てみましょう 入力: 出力: 4 説明: 7をルートとするツリーのサイズは同じです。 2をルートとするツリーのサイズは同じです。 0をルートとする
-
C ++のsizeof演算子とは何ですか?
sizeofはキーワードですが、変数またはデータ型のサイズをバイト単位で決定するコンパイル時の演算子です。 sizeof演算子を使用して、クラス、構造体、共用体、およびその他のユーザー定義のデータ型のサイズを取得できます。 sizeofを使用する構文は次のとおりです- sizeof (data type) ここで、データ型は、クラス、構造体、共用体、およびその他のユーザー定義のデータ型を含む、目的のデータ型です。 sizeof演算子をchar型のオブジェクトに適用すると、1が得られます。sizeof演算子を配列に適用すると、配列IDで表されるポインターのサイズではなく、その配列の合計バイト数が