打印 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

更新于:03-Jan-2020

300 次浏览

职业惊艳开启

通过完成课程获得认证

开始学习
广告