मान लीजिए हमारे पास एक अभिव्यक्ति है। अभिव्यक्ति में कुछ पैरेंथेसिस हैं; हमें जांचना है कि पैरेंथेसिस संतुलित हैं या नहीं। पैरेंथेसिस का क्रम (), {} और [] है। मान लीजिए दो स्ट्रिंग हैं। "()[(){()}]" यह वैध है, लेकिन "{[}]" अवैध है।
कार्य सरल है; हम इसे करने के लिए स्टैक का उपयोग करेंगे। हमें समाधान प्राप्त करने के लिए इन चरणों का पालन करना चाहिए -
अभिव्यक्ति को तब तक ट्रैवर्स करें जब तक यह समाप्त न हो जाए
यदि वर्तमान वर्ण प्रारंभिक ब्रैकेट है जैसे (, { या [, तो स्टैक में पुश करें
यदि वर्तमान वर्ण समापन ब्रैकेट है जैसे ), } या ], तो स्टैक से पॉप करें, और जांचें कि क्या पॉप किया गया ब्रैकेट वर्तमान वर्ण का संबंधित प्रारंभिक ब्रैकेट है, तो यह ठीक है, अन्यथा, वह संतुलित नहीं है।
स्ट्रिंग समाप्त होने के बाद, यदि स्टैक में कुछ प्रारंभिक ब्रैकेट बचे हैं, तो स्ट्रिंग संतुलित नहीं है।
उदाहरण
#include <iostream>
#include <stack>
using namespace std;
bool isBalancedExp(string exp) {
stack 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