DEV Community

Mridu Bhatnagar
Mridu Bhatnagar

Posted on • Edited on

Day 1 - Balanced Brackets

Below mentioned problem is not a leetcode problem. This was one of the practice problems on Hackerrank.

Complete the function isBalanced in the editor below. It must return a string: YES if the sequence is balanced or NO if it is not.

isBalanced has the following parameter(s):

s: a string of brackets

Problem Statement - https://www.hackerrank.com/challenges/balanced-brackets/problem

Solution Approach

  1. Iterate over the given string.
  2. If you encounter an opening bracket "([{" push it to the stack.
  3. If you encounter a closing bracket pop the topmost element from the stack.
class Stack: def __init__(self): self.items = [] def push(self, element): self.items.append(element) def pop(self): return self.items.pop() def size(self): length = len(self.items) return length def peek(self): return self.items[len(self.items)-1] def isBalanced(s): stack = Stack() result = True for x in s: if (x=='[') or (x=='(') or (x=='{'): stack.push(x) elif (x == ']') or (x == ')') or (x == '}'): if stack.size() > 0: topmost_element = stack.pop() if ((topmost_element == '[') and (x != ']')) or ((topmost_element == '(') and (x != ')')) or ((topmost_element == '{') and (x != '}')): result = False break if stack.size() == 0 and result: return "YES" else: return "NO" 

Alternate approaches to optimize the solution are welcome. No code snippets. Just discussion. :)

Top comments (1)

Collapse
 
prathamesh404 profile image
Prathamesh

Disclaimer: If in case violates the requirements, please let me know

  • Was it a necessary constraint to create a stack from scratch? List in python have underlying capability that works like Stack having same time complexity of pop(), append() as O(1),
  • Also a HashMap or dictionary in python to map key: values as{open:close}. Which also has O(1) time complexity for accessing an element. e.g.
mapping = { '{':'}', '[':']', '(':')' } 
  • Code redundancy can be reduced, long conditional statements makes code less readable. e.g. if ((topmost_element == '[') and (x != ']')) or ((topmost_element == '(') and (x != ')')) or ((topmost_element == '{') and (x != '}')):

Thanks.