Find index of closing bracket for a given opening bracket in an expression
Given a string with brackets. If the start index of the open bracket is given, find the index of the closing bracket. Examples:
Input : string = [ABC[23]][89]
index = 0
Output : 8
The opening bracket at index 0 corresponds
to closing bracket at index 8.The idea is to use Stack data structure. We traverse given expression from given index and keep pushing starting brackets. Whenever we encounter a closing bracket, we pop a starting bracket. If stack becomes empty at any moment, we return that index.
C++
// CPP program to find index of closing// bracket for given opening bracket.#include <bits/stdc++.h>using namespace std;// Function to find index of closing// bracket for given opening bracket.void test(string expression, int index){ int i; // If index given is invalid and is // not an opening bracket. if(expression[index]!='['){ cout << expression << ", " << index << ": -1\n"; return; } // Stack to store opening brackets. stack <int> st; // Traverse through string starting from // given index. for(i = index; i < expression.length(); i++){ // If current character is an // opening bracket push it in stack. if(expression[i] == '[') st.push(expression[i]); // If current character is a closing // bracket, pop from stack. If stack // is empty, then this closing // bracket is required bracket. else if(expression[i] == ']'){ st.pop(); if(st.empty()){ cout << expression << ", " << index << ": " << i << "\n"; return; } } } // If no matching closing bracket // is found. cout << expression << ", " << index << ": -1\n";}// Driver Codeint main() { test("[ABC[23]][89]", 0); // should be 8 test("[ABC[23]][89]", 4); // should be 7 test("[ABC[23]][89]", 9); // should be 12 test("[ABC[23]][89]", 1); // No matching bracket return 0;}// This code is contributed by Nikhil Jindal. |
Java
// Java program to find index of closing// bracket for given opening bracket.import java.util.Stack;class GFG {// Function to find index of closing// bracket for given opening bracket. static void test(String expression, int index) { int i; // If index given is invalid and is // not an opening bracket. if (expression.charAt(index) != '[') { System.out.print(expression + ", " + index + ": -1\n"); return; } // Stack to store opening brackets. Stack<Integer> st = new Stack<>(); // Traverse through string starting from // given index. for (i = index; i < expression.length(); i++) { // If current character is an // opening bracket push it in stack. if (expression.charAt(i) == '[') { st.push((int) expression.charAt(i)); } // If current character is a closing // bracket, pop from stack. If stack // is empty, then this closing // bracket is required bracket. else if (expression.charAt(i) == ']') { st.pop(); if (st.empty()) { System.out.print(expression + ", " + index + ": " + i + "\n"); return; } } } // If no matching closing bracket // is found. System.out.print(expression + ", " + index + ": -1\n"); }// Driver Code public static void main(String[] args) { test("[ABC[23]][89]", 0); // should be 8 test("[ABC[23]][89]", 4); // should be 7 test("[ABC[23]][89]", 9); // should be 12 test("[ABC[23]][89]", 1); // No matching bracket }// this code is contributed by Rajput-Ji} |
Python
# Python program to find index of closing# bracket for a given opening bracket.from collections import dequedef getIndex(s, i): # If input is invalid. if s[i] != '[': return -1 # Create a deque to use it as a stack. d = deque() # Traverse through all elements # starting from i. for k in range(i, len(s)): # Pop a starting bracket # for every closing bracket if s[k] == ']': d.popleft() # Push all starting brackets elif s[k] == '[': d.append(s[i]) # If deque becomes empty if not d: return k return -1# Driver code to test above method.def test(s, i): matching_index = getIndex(s, i) print(s + ", " + str(i) + ": " + str(matching_index))def main(): test("[ABC[23]][89]", 0) # should be 8 test("[ABC[23]][89]", 4) # should be 7 test("[ABC[23]][89]", 9) # should be 12 test("[ABC[23]][89]", 1) # No matching bracketif __name__ == "__main__": main() |
C#
// C# program to find index of closing// bracket for given opening bracket.using System;using System.Collections;public class GFG {// Function to find index of closing// bracket for given opening bracket. static void test(String expression, int index) { int i; // If index given is invalid and is // not an opening bracket. if (expression[index] != '[') { Console.Write(expression + ", " + index + ": -1\n"); return; } // Stack to store opening brackets. Stack st = new Stack(); // Traverse through string starting from // given index. for (i = index; i < expression.Length; i++) { // If current character is an // opening bracket push it in stack. if (expression[i] == '[') { st.Push((int) expression[i]); } // If current character is a closing // bracket, pop from stack. If stack // is empty, then this closing // bracket is required bracket. else if (expression[i] == ']') { st.Pop(); if (st.Count==0) { Console.Write(expression + ", " + index + ": " + i + "\n"); return; } } } // If no matching closing bracket // is found. Console.Write(expression + ", " + index + ": -1\n"); }// Driver Code public static void Main() { test("[ABC[23]][89]", 0); // should be 8 test("[ABC[23]][89]", 4); // should be 7 test("[ABC[23]][89]", 9); // should be 12 test("[ABC[23]][89]", 1); // No matching bracket }}// This code is contributed by 29AjayKumar |
Javascript
// Javascript program to find index of closing // bracket for given opening bracket. class Stack { constructor() { this.items = []; } // add element to the stack push(element) { return this.items.push(element); } // remove element from the stack pop() { if (this.items.length > 0) { return this.items.pop(); } } // view the last element top() { return this.items[this.items.length - 1]; } // check if the stack is empty isEmpty() { return this.items.length == 0; } // the size of the stack size() { return this.items.length; } // empty the stack clear() { this.items = []; } } // Function to find index of closing // bracket for given opening bracket. function test(expression, index) { var i; // If index given is invalid and is // not an opening bracket. if (expression[index] != "[") { console.log(expression + ", " + index + ": -1"); return; } // Stack to store opening brackets. let st = new Stack(); //stack <int> st; // Traverse through string starting from // given index. for (i = index; i < expression.length; i++) { // If current character is an // opening bracket push it in stack. if (expression[i] == "[") st.push(expression[i]); // If current character is a closing // bracket, pop from stack. If stack // is empty, then this closing // bracket is required bracket. else if (expression[i] == "]") { st.pop(); if (st.isEmpty()) { console.log(expression + ", " + index + ": " + i); return; } } } // If no matching closing bracket // is found. console.log(expression + ", " + index + ": -1"); } // Driver Code test("[ABC[23]][89]", 0); // should be 8 test("[ABC[23]][89]", 4); // should be 7 test("[ABC[23]][89]", 9); // should be 12 test("[ABC[23]][89]", 1); // No matching bracket // This code is contributed by satwiksuman |
Output:
[ABC[23]][89], 0: 8 [ABC[23]][89], 4: 7 [ABC[23]][89], 9: 12 [ABC[23]][89], 1: -1
Time Complexity: O(n) Auxiliary Space: O(n)




.gif)

Please Login to comment...