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で表されるポインターのサイズではなく、その配列の合計バイト数が