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

C++で式の括弧が重複しているかどうかを確認します


式expがあると考えてください。そして、expの周りに括弧のセットが重複していないかどうかを確認する必要があります。 1つの部分式が複数の括弧セットで囲まれている場合、式の括弧は重複します。たとえば、式が-

のような場合
(5+((7−3)))

ここで、部分式(7 – 3)は2つの括弧のペアで囲まれているため、これらは重複した括弧です。

この問題を解決するために、スタックを使用します。 exp内の各文字を繰り返し処理し、文字が開き括弧'('、または演算子またはオペランドのいずれかである場合は、それをスタックにプッシュします。文字が閉じ括弧である場合は、スタックから文字を繰り返しポップします。一致する開き括弧が見つかり、カウンターが使用されるまで、その値は、開き括弧と閉じ括弧のペアの間に遭遇するすべての文字に対して増分されます。カウンターの値と等しい値が1未満の場合、重複する括弧のペアが見つかりましたが、そうでない場合は見つかりません。

#include<iostream>
#include<stack>
using namespace std;
bool hasDuplicateParentheses(string str) {
   stack<char> stk;
   for (int i = 0; i<str.length(); i++) {
      char ch = str[i];
      if (ch == ')') {
         char top = stk.top();
         stk.pop();
         int count = 0;
         while (top != '(') {
            count++;
            top = stk.top();
            stk.pop();
         }
         if(count < 1) {
            return true;
         }
      }
      else
         stk.push(ch);
   }
   return false;
}
int main() {
   string str = "(5+((7-3)))";
   if (hasDuplicateParentheses(str))
      cout << "Duplicate parentheses has Found";
   else
      cout << "No Duplicates parentheses has Found ";
}

出力

Duplicate parentheses has Found

  1. C++で重複するサブツリーを検索する

    二分木があるとします。重複するすべてのサブツリーを見つける必要があります。したがって、重複するサブツリーの種類ごとに、それらのいずれかのルートノードを返す必要があります。したがって、-のようなツリーがあるとします。 重複するサブツリーは-です これを解決するには、次の手順に従います- 配列retを作成し、マップを作成しますm 再帰メソッドsolve()を定義します。これはノードを入力として受け取ります。これは次のように機能します- ノードがnullの場合、-1を返します x:=ノードの値を文字列として、「#」を連結します。 左:=ソルブ(ノードの左)、右:=ソルブ(ノード

  2. C++で重複するすべてのサブツリーを検索する

    二分木があると考えてください。ツリーに重複するサブツリーがあるかどうかを確認する必要があります。以下のような二分木があるとします- サイズ2の2つの同一のサブツリーがあります。各サブツリーD、BD、およびBEには、両方とも重複するサブツリーがあります。ツリーのシリアル化とハッシュプロセスを使用して、この問題を解決できます。サブツリーの順序どおりの走査をハッシュテーブルに格納します。空のノードには開き括弧と閉じ括弧を挿入します。 例 #include <iostream> #include <unordered_set> #include <unordere