इस समस्या में, हमें एक अभिव्यक्ति दी गई है। और हमें ब्रैकेट नंबर अनुक्रम प्रिंट करना है। आइए एक उदाहरण देखकर इस समस्या को बेहतर ढंग से समझते हैं।
उदाहरण,
Input : ((()())()) Output : 1233442551
व्याख्या - यहां हमें 5 ब्रैकेट जोड़े मिले हैं और हमने उन्हें उनकी घटना के क्रम में अनुक्रम में प्रिंट किया है।
अब चूंकि हम समस्या के बारे में जानते हैं, आइए इस समाधान का समाधान बनाते हैं।
इस समस्या का समाधान स्टैक डेटा संरचना की आवश्यकता है। हम एक वेरिएबल का उपयोग करेंगे जो बाएं ब्रैकेट की संख्या की गिनती रखता है और स्टैक दाएं ब्रैकेट का ट्रैक रखता है। हम बाएं ब्रैकेट की गिनती करेंगे और उन्हें स्टैक में डालेंगे और जब दायां ब्रैकेट मिले तो पॉप करेंगे।
एल्गोरिदम
चरण 1 : leftBrackets = 1 आरंभ करें। स्टैक rightBrackets, खाली। चरण 2 : i = 0 से n-1 तक वेरिएबल i का उपयोग करके अभिव्यक्ति को ट्रैवर्स करें। चरण 3 : यदि expression[i] == '(' यानी बायां ब्रैकेट मिला। तब, चरण 3.1 : 'leftBracket ' प्रिंट करें। चरण 3.2 : leftBracket का मान स्टैक में डालें। चरण 3.3 : leftBracket++। चरण 4 : यदि expression[i] == ')' यानी दायां ब्रैकेट मिला। तब, चरण 4.1 : स्टैक के शीर्ष को प्रिंट करें। चरण 4.2 : स्टैक के शीर्ष तत्व को पॉप करें। चरण 5 : बाहर निकलें। उदाहरण
अब उपरोक्त एल्गोरिदम के कार्यान्वयन को दर्शाने वाला प्रोग्राम बनाते हैं।
#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