列印 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 次瀏覽

職業驚豔開啟

透過完成課程獲得認證

開始學習
廣告