• + 0 comments

    Fairly simple Stack based problem. Nothing too complex.

    Here's my Java 8 solution, passing all test cases, for Max Score of 25:

    class Result {
        
        private static final String B_ROUND  = "()";
        private static final String B_SQUARE = "[]";
        private static final String B_CURLY  = "{}";
        
        private static String getBracketType(Character bracketCh) {
            return getBracketType("" + bracketCh);
        }
        
        private static String getBracketType(String bracketStr) {
            switch(bracketStr) {
                case "(":
                case ")":
                    return B_ROUND;
                case "[":
                case "]":
                    return B_SQUARE;
                case "{":
                case "}":
                    return B_CURLY;
                default:
                    return "";
            }
        }
        
        private static Character getExpectedOpenBracketCh(String curBracketType) {
            switch (curBracketType) {
                case B_ROUND:
                    return '(';
                case B_SQUARE:
                    return '[';
                case B_CURLY:
                    return '{';
                default:
                    return 'd';
            }
        }
        
        /*
         * Complete the 'isBalanced' function below.
         *
         * The function is expected to return a STRING.
         * The function accepts STRING s as parameter.
         */
    
        public static String isBalanced(String s) {
            // Write your code here
            Stack<Character> bracketsStack = new Stack<>();
    
            System.err.println(""); System.err.println("");
            System.err.println("s=" + s);
    
            for (int sIdx = 0 ; sIdx < s.length() ; sIdx++) {
    
                Character sCh = s.charAt(sIdx);
                String curBracketType = getBracketType(sCh);
                
                // System.err.println("sIdx=" + sIdx + " | sCh=" + sCh + " | " +
                //                    "curBracketType=" + curBracketType);
    
                switch(sCh) {
                    case '(':
                    case '[':
                    case '{':
                        bracketsStack.push(sCh);
                        break;
    
                    case ')':
                    case ']':
                    case '}':
                    
                        if (bracketsStack.isEmpty()) {
                            return "NO";
                        }
    
                        Character peekStackTopBracket =
                                      bracketsStack.peek();
    
                        Character expectedOpenBracket = 
                                      getExpectedOpenBracketCh(curBracketType);
                                      
                        // System.err.println("peekStackTopBracket=" + 
                        //                    peekStackTopBracket + " | " +
                        //                    "expectedOpenBracket=" + 
                        //                    expectedOpenBracket);
    
                        if (peekStackTopBracket != expectedOpenBracket) {
                            return "NO";
                        }
    
                        bracketsStack.pop();
                        break;
                }
            }
            
            if (!bracketsStack.isEmpty()) {
                return "NO";
            }
    
            return "YES";
        }
    
    }