C++での単語パターン
パターンと文字列strがあるとし、strが同じパターンに従うかどうかを調べます。ここで続くとは、パターン内の文字とstr内の空でない単語の間に全単射があることを意味します。
したがって、入力がpattern ="cbbc"、str ="word pattern pattern word"のような場合、出力はTrueになります。
これを解決するには、次の手順に従います-
-
strcin:=str
-
単語の配列を定義する
-
strcinの単語ごとに
-
単語の最後に単語を挿入
-
-
1つのマップp2iを定義する
-
i:=0
-
pat:=空の文字列
-
パターン内のcの場合-
-
cがp2iのメンバーでない場合、-
-
(iを1増やします)
-
p2i [c]:=i
-
-
pat:=pat concatenate p2i [c]
-
-
1つのマップstr2iを定義する
-
i:=0
-
pat1:=空白の文字列
-
言葉でcの場合-
-
cがstr2iのメンバーでない場合、-
-
(iを1増やします)
-
str2i [c]:=i
-
-
pat1:=pat1連結str2i[c]
-
-
pat1がpatと同じ場合はtrueを返します
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: bool wordPattern( string pattern, string str ) { istringstream strcin(str); string word; vector<string> words; while (strcin >> word) words.push_back(word); unordered_map<char, int> p2i; int i = 0; string pat = ""; for (auto c : pattern) { if (p2i.count(c) == 0) { i++; p2i[c] = i; } pat += to_string(p2i[c]); } unordered_map<string, int> str2i; i = 0; string pat1 = ""; for (auto c : words) { if (str2i.count(c) == 0) { i++; str2i[c] = i; } pat1 += to_string(str2i[c]); } return pat1 == pat; } }; main(){ Solution ob; cout << (ob.wordPattern("cbbc", "word pattern pattern word")); }
入力
"cbbc", "word pattern pattern word"
出力
1
-
C++でのBKツリーの紹介
BKツリーまたはBurkhardツリーは、レーベンシュタイン距離に基づいてスペルチェックを実行するために通常使用されるデータ構造の形式です。また、文字列照合にも使用されます。オートコレクト機能を使用して、このデータ構造を作成できます。辞書にいくつかの単語があり、他のいくつかの単語のスペルミスをチェックする必要があるとします。スペルがチェックされる特定の単語に近い単語のコレクションが必要です。たとえば、「uck」という単語がある場合、正しい単語は(truck、duck、duck、suck)になります。したがって、単語を削除するか、文字を適切な文字に置き換える新しい単語を追加することで、スペルミス
-
C++での複合デザインパターン
複合パターンは、オブジェクトのグループを単一のオブジェクトと同じように扱う必要がある場合に使用されます。複合パターンは、階層全体だけでなく一部を表すために、ツリー構造の観点からオブジェクトを構成します。このタイプのデザインパターンは、オブジェクトのグループのツリー構造を作成するため、構造パターンに分類されます。 このパターンは、独自のオブジェクトのグループを含むクラスを作成します。このクラスは、同じオブジェクトのグループを変更する方法を提供します。 組織の従業員階層を示す次の例を使用して、複合パターンの使用を示しています。 ここでは、コンポジットとリーフの両方のクラスがコンポーネン