Given a string str, the task is to find the bracket numbers, i.e., for each bracket in str, return i if the bracket is the ith opening or closing bracket to appear in the string.
Examples:
Input: str = "(aa(bdc))p(dee)" Output: 1 2 2 1 3 3 Explanation: The highlighted brackets in the given string (aa(bdc))p(dee) are assigned the numbers as: 1 2 2 1 3 3.
Input: str = "(((()("
Output: 1 2 3 4 4 5
Explanation: The highlighted brackets in
the given string (((()( are assigned
the numbers as: 1 2 3 4 4 5
Expected Time Complexity: O(|str|)
Expected Auxiliary Space: O(|str|)
Constraints:
1 <= |str| <= 105
str contains lowercase English alphabets, and ‘(‘, ‘)’ characters
At any index, the number of opening brackets is greater than or equal to closing brackets.
Approach 01
-
C++
-
Python
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;
class Solution {
public:
vector<int> bracketNumbers(string str) {
vector<int> result;
stack<int> bracket_stack;
int bracket_count = 0;
for(int i = 0; i < str.length(); i++) {
if(str[i] == '(') {
bracket_count++;
bracket_stack.push(bracket_count);
result.push_back(bracket_count);
}
if(str[i] == ')') {
result.push_back(bracket_stack.top());
bracket_stack.pop();
}
}
return result;
}
};
from typing import List
class Solution:
def bracketNumbers(self, str):
result = []
bracket_stack = []
bracket_count = 0
for char in str:
if char == '(':
bracket_count += 1
bracket_stack.append(bracket_count)
result.append(bracket_count)
if char == ')':
result.append(bracket_stack[-1])
bracket_stack.pop()
return result