대괄호가 있는 표현식이 있다고 가정합니다. 하나의 시작 괄호의 인덱스가 주어지면 그 끝 괄호를 찾아야 합니다. 따라서 표현식이 (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