Skip to main content

Balanced Brackets HackerRank Solution in Java and Python with Explanation

Java and Python Solution for Balanced Brackets HackerRank Problem | Check opening and closing brackets match or not

Balanced Brackets HackerRank Solution in Java and Python with Explanation

Problem Description :

A bracket is considered to be any one of the following characters: (, ), {, }, [, or ].

Two brackets are considered to be a matched pair if the an opening bracket (i.e., (, [, or {) occurs to the left of a closing bracket (i.e., ), ], or }) of the exact same type. There are three types of matched pairs of brackets: [], {}, and ().

A matching pair of brackets is not balanced if the set of brackets it encloses are not matched. For example, {[(])} is not balanced because the contents in between { and } are not balanced. The pair of square brackets encloses a single, unbalanced opening bracket, (, and the pair of parentheses encloses a single, unbalanced closing square bracket, ].

By this logic, we say a sequence of brackets is balanced if the following conditions are met:

  1. It contains no unmatched brackets.
  2. The subset of brackets enclosed within the confines of a matched pair of brackets is also a matched pair of brackets.

Given n Strings of brackets, determine whether each sequence of brackets is balanced. If a string is balanced, return YES. Otherwise, return NO

Example 1 :

input : "{[()]}"
output : YES

Example 2 :

input : "{[(])}"
output : NO

Example 3 :

input : "{{[[(())]]}}"
output : YES

Example 4 :

input : "}][}}(}]{))]"
output : NO

So lets jump on code. First we will seen code in Java and then Python.

Solution 1 : Balanced Brackets Solution in Java

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

    public static String isBalanced(String s) {

        // Convert string to character array
        char[] array = s.toCharArray();
        
        List<Character> list = new ArrayList<>();

        // Return "NO" if starting bracket is closing bracket
        if (array[0] == ')' || array[0] == '}' || array[0] == ']') {
            return "NO";
        }
        
        for (int i = 0; i < array.length; i++) {
            if (array[i] != ')' && array[i] != '}' && array[i] != ']') {
                list.add(array[i]);
            } else if (list.size() == 0) {
                return "NO";
            } else {
                char lastBreacket = list.get(list.size()-1);
                if (lastBreacket == '(' && array[i] != ')') {
                    return "NO";
                } else if (lastBreacket == '{' && array[i] != '}') {
                     return "NO";
                } else if (lastBreacket == '[' && array[i] != ']') {
                     return "NO";
                } else {
                    list.remove(list.size()-1);
                }
            }
        }

        if (list.size() == 0) {
            return "YES";
        } else {
            return "NO";
        }
    }

}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int t = Integer.parseInt(bufferedReader.readLine().trim());

        IntStream.range(0, t).forEach(tItr -> {
            try {
                String s = bufferedReader.readLine();

                String result = Result.isBalanced(s);

                bufferedWriter.write(result);
                bufferedWriter.newLine();
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });

        bufferedReader.close();
        bufferedWriter.close();
    }
}

Solution Explanation :

  • Convert given string to character array.
  • If first character is closing bracket, then return "NO". (No need to go forward).
  • Traverse through character array.
    • If current bracket does not start with closing brackets, then store into characters list.
    • In else if condition, return "NO" if list size becomes 0 and array still contains brackets.
    • In else condition, get last bracket from list and check current array bracket match its closing brackets or not. If it is match then remove last bracket from list otherwise return "NO".
  • After for loop, return "YES" if list size is 0 otherwise return "NO".

Solution 2 : Balanced Brackets Solution in Python

def isBalanced(s):
    stack = []
    # map right bracket (key) to left bracket (value)
    right = {'}':'{',')':'(',']':'['}
    left = ['(','{','[']
    for c in s:
        # push all left brackets to the stack
        if c in left:
            stack.append(c)
        else:
            if len(stack) > 0 and stack[-1] == right[c]:
                # matches
                stack.pop()
            else:
                # doesn't match
                return 'NO'
    # if anything is still on the stack
    if len(stack) > 0:
        return 'NO'
    # made it through all tests
    return 'YES'

Solution Explanation :

  • Whenever an opening bracket appears, we push it onto the stack.
  • If a closing bracket appears and if it matches the opening bracket at the top of the stack, it means that the brackets are balanced and we pop the opening bracket out of the stack and continue analyzing the string.
  • If the closing bracket doesn't match the opening bracket at the top of the stack, we can infer that the string is not balanced, and we print NO.
  • After processing the string completely and if the stack is empty, the string is balanced, and we print YES, else, we print NO.


Other HackerRank Problem and Solution with Explanation :

 

 

 

 

Comments

Popular posts from this blog

Queen's Attack II HackerRank Solution in Java with Explanation

Queen's Attack II Problem's Solution in Java (Chessboard Problem)   Problem Description : You will be given a square chess board with one queen and a number of obstacles placed on it. Determine how many squares the queen can attack.  A queen is standing on an n * n chessboard. The chess board's rows are numbered from 1 to n, going from bottom to top. Its columns are numbered from 1 to n, going from left to right. Each square is referenced by a tuple, (r, c), describing the row r and column c, where the square is located. The queen is standing at position (r_q, c_q). In a single move, queen can attack any square in any of the eight directions The queen can move: Horizontally (left, right) Vertically (up, down) Diagonally (four directions: up-left, up-right, down-left, down-right) The queen can move any number of squares in any of these directions, but it cannot move through obstacles. Input Format : n : The size of the chessboard ( n x n ). k : The number of obstacles...

Java Hashset HackerRank Solution | Programming Blog

Java Hashset HackerRank Solution with Explanation   Problem Statement :- In computer science, a set is an abstract data type that can store certain values, without any particular order, and no repeated values. {1,2,3} is an example of a set, but {1,2,2} is not a set. Today you will learn how to use sets in java by solving this problem. You are given n pairs of strings. Two pairs (a,b) and (c,d) are identical if a = c and b = d. That also implies (a,b) is not same as (b,a). After taking each pair as input, you need to print number of unique pairs you currently have. See full problem description in HackerRank Website :- https://www.hackerrank.com/challenges/java-hashset/problem Let's see solution of problem. import java.util.HashSet; import java.util.Scanner; public class Solution {     public static void main(String[] args) {         Scanner s = new Scanner(System.in);         System.out.println("Enter tot...