I promised in the last article that we’re going to have a look at how to solve the Regular Brackets problem with multiple types of brackets, and as I said last time we’re going to use a data structure called: the STACK. 😄
In computer science, a stack is an abstract data type that serves as a collection of elements, with two principal operations: push
, which adds an element to the collection, and pop
, which removes the most recently added element that was not yet removed. The order in which elements come off a stack gives rise to its alternative name, LIFO (for last in, first out). Wikipedia.
In JavaScript we already have the array data structure which has the push
and pop
methods. This is perfect for what we need.
First let’s create the function, which receives a string of brackets (noted b
for simplicity):
function regularBracketsSequence2(b) {}
Now… let’s add the empty stack and again a simple for loop to check each bracket:
function regularBracketsSequence2(b) {
var stack = [];
for (var i = 0; i < brackets.length; i++) {}
}
Great! Let’s talk a little bit now about why do we use a stack
for this challenge, and how does it help.
As you might have already thought, a simple integer count
won’t help this time as it did last time when we only had one type of brackets, so we’ll use a stack
to store each opening bracket in it, of any type. This way when we encounter a closing bracket we can check if it is of the same type. If it is, we pop
the last item from the array as we found the matching pair, otherwise if it is an opening bracket, we push it in the stack
.
We also need to check if we encounter a closing bracket before an opening one, if that’s the case, than we already know that the sequence isn’t correct.
function regularBracketsSequence2(b) {
var stack = [];
for (var i = 0; i < b.length; i++) {
if (b[i] === '(' || b[i] === '[' || b[i] === '{') {
stack.push(b[i]);
} else if (
(b[i].length > 0 &&
b[i] === ')' &&
stack[stack.length - 1] === '(') ||
(b[i] === ']' && stack[stack.length - 1] === '[') ||
(b[i] === '}' && stack[stack.length - 1] === '{')
) {
stack.pop();
} else {
return false;
}
}
return stack.length === 0;
}
At the end we check if the stack
is empty, because there might be a chance to have more opening brackets than closing ones, which is also not allowed! 🙂
Conclusion
The stack
data structure is very powerful. It’s used in many algorithms and is a must know for every developer.
Now you are prepared to face this challenge in any interview. As you can see it’s pretty straightforward.
I wish you all the best for your next interview!
Happy coding! 😇