C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

与えられた単語がC++で与えられたパターンを維持しているかどうかをチェックするプログラム


パターンpと文字列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 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

  1. 3D平面内の点が同一平面上にあるかどうかを確認するC++プログラム

    ポイント(x1、y1、z1)、(x2、y2、z2)、(x3、y3、z3)、および(x4、y4、z4)が与えられ、プログラムは与えられたポイントが同一平面上にあるかどうかをチェックする必要があります。ポイントは、同じ平面の下にあり、異なる場合は同一平面上にあると言われます-2平面は、ポイントが同一平面上にありません。 以下に示すのは、4つのポイントを含む画像で、すべてが同じ平面の下にあります。これは、ポイントが同一平面上にあることを意味するxy平面です。 以下に示すのは、4つのポイントを含む画像で、すべてが異なる平面の下にあり、ポイントが同一平面上にないことを示しています 例 I

  2. グラフが強く接続されているかどうかをチェックするC++プログラム

    有向グラフでは、1つのコンポーネントの頂点の各ペアの間にパスがある場合、コンポーネントは強く接続されていると言われます。 このアルゴリズムを解決するには、まず、DFSアルゴリズムを使用して各頂点の終了時間を取得し、次に転置されたグラフの終了時間を検索します。次に、頂点をトポロジカルソートの降順で並べ替えます。 入力 :グラフの隣接行列。 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 出力 :以下は、与え