在C ++中打印括号编号

在这个问题上,我们得到表达。而且我们必须打印括号编号序列。让我们看一个例子,以更好地理解问题。

例,

Input : ((()())())
Output : 1233442551

说明-在这里,我们遇到了5对括号,并按出现的顺序打印了它们。

现在,既然我们知道了这个问题,那么让我们为该解决方案创建一个解决方案。

该问题的解决方案需要堆栈数据结构。我们将使用一个变量来保留左括号的数量,并使用堆栈来跟踪右括号。我们将计算左括号并将其推入堆栈,并在遇到右括号时弹出。

算法

Step 1 : Initialise leftBrackets = 1. stack rightBrackets, empty.
Step 2 : traverse the expression using variable i = 0 to n-1.
Step 3 : if expression[i] == ‘(’ i.e. left bracket is encountered. Then,
   Step 3.1 : PRINT ‘leftBracket ‘.
   Step 3.2 : push the value of leftBracket in stack.
   Step 3.3 : leftBracket++.
Step 4 : if expression[i] == ‘)’ i.e. right bracket is encountered. Then,
   Step 4.1 : PRINT top of stack.
   Step 4.2 : pop top element of the stack.
Step 5 : EXIT.

示例

现在,让我们创建程序来说明上述算法的实现。

#include <bits/stdc++.h>
using namespace std;
void bracketCount(string expression, int n){
   int leftBracket = 1;
   stack<int> rightBracket;
   for (int i = 0; i < n; i++) {
      if (expression[i] == '(') {
         cout<<leftBracket<<" ";
         rightBracket.push(leftBracket);
         leftBracket++;
      }
      else if(expression[i] == ')') {
         cout<<rightBracket.top() << " ";
         rightBracket.pop();
      }
   }
}
int main(){
   string expression = "()((())()())";
   int n = expression.size();
   bracketCount(expression, n);
   return 0;
}

输出结果

1 1 2 3 4 4 3 5 5 6 6 2