मान लीजिए हमारे पास एक अभिव्यक्ति है। अभिव्यक्ति में कुछ पैरेंथेसिस हैं; हमें जांचना है कि पैरेंथेसिस संतुलित हैं या नहीं। पैरेंथेसिस का क्रम (), {} और [] है। मान लीजिए दो स्ट्रिंग्स हैं। "()[(){()}]" यह वैध है, लेकिन "{[}]" अवैध है।
कार्य सरल है; हम इसे करने के लिए स्टैक का उपयोग करेंगे। हमें समाधान प्राप्त करने के लिए इन चरणों का पालन करना चाहिए -
- अभिव्यक्ति को तब तक ट्रैवर्स करें जब तक यह समाप्त न हो जाए
- यदि वर्तमान वर्ण प्रारंभिक ब्रैकेट जैसे (, { या [ है, तो स्टैक में पुश करें
- यदि वर्तमान वर्ण समापन ब्रैकेट जैसे ), } या ] है, तो स्टैक से पॉप करें, और जांचें कि पॉप किया गया ब्रैकेट वर्तमान वर्ण का संबंधित प्रारंभिक ब्रैकेट है या नहीं, तो यह ठीक है, अन्यथा वह संतुलित नहीं है।
- स्ट्रिंग समाप्त होने के बाद, यदि स्टैक में कुछ प्रारंभिक ब्रैकेट बचे हैं, तो स्ट्रिंग संतुलित नहीं है।
उदाहरण
#include <iostream> #include <stack> using namespace std; bool isBalancedExp(string exp) { stack<char> stk; char x; for (int i=0; i<exp.length(); i++) { if (exp[i]=='('||exp[i]=='['||exp[i]=='{') { stk.push(exp[i]); continue; } if (stk.empty()) return false; switch (exp[i]) { case ')': x = stk.top(); stk.pop(); if (x=='{' || x=='[') return false; break; case '}': x = stk.top(); stk.pop(); if (x=='(' || x=='[') return false; break; case ']': x = stk.top(); stk.pop(); if (x =='(' || x == '{') return false; break; } } return (stk.empty()); } int main() { string expresion = "()[(){()}]"; if (isBalancedExp(expresion)) cout << "This is Balanced Expression"; else cout << "This is Not Balanced Expression"; }आउटपुट
This is Balanced Expression