মনে করুন আমাদের ব্র্যাকেটসহ একটি এক্সপ্রেশন আছে। যদি একটি শুরুর ব্র্যাকেটের ইনডেক্স দেওয়া থাকে, তবে আমাদের সেই ব্র্যাকেটের ক্লোজিং ব্র্যাকেট বের করতে হবে। তাই যদি এক্সপ্রেশনটি হয়: (25*6+(88-32+(50/10)+20)), এবং ওপেনিং ব্র্যাকেটের ইনডেক্স 6, তবে ক্লোজিং ব্র্যাকেট হবে পজিশন 23-এ।
এখানে আমরা স্ট্যাক ডেটা স্ট্রাকচার ব্যবহার করব এই সমস্যাটি সমাধান করতে। আমরা দেওয়া ইনডেক্স থেকে এক্সপ্রেশন ট্রাভার্স করব, এবং ওপেনিং ব্র্যাকেটগুলো পুশ করব, যখন ক্লোজিং ব্র্যাকেট পাওয়া যাবে, তবে স্ট্যাক থেকে পপ করব, যখন স্ট্যাক খালি হয়, তবে ইনডেক্স রিটার্ন করব।
উদাহরণ
#include <iostream>
#include <stack>
using namespace std;
void getEndingBracketIndex(string exp, int index) {
int i;
if (exp[index] != '(') {
cout << exp << "Closing bracket of parentheses started at " << index << " present at index -1\n";
return;
}
stack<int> stk;
for (i = index; i < exp.length(); i++) {
if (exp[i] == '(')
stk.push(exp[i]);
else if (exp[i] == ')') {
stk.pop();
if (stk.empty()) {
cout << exp << ", Closing bracket of parentheses started at " << index << " present at index " << i << "";
return;
}
}
}
cout << exp << ", Closing bracket of parentheses started at " << index << " present at index -1";
}
int main() {
getEndingBracketIndex("(25*6+(88-32+(50/10)+20))", 6);
}
আউটপুট
(25*6+(88-32+(50/10)+20)), Closing bracket of parentheses started at 6 present at index 23