Apex Coding Interview Challenge #10

Given a string of round, curly, and square open and closing brackets, return whether the brackets are balanced (well-formed).

For example, given the string “([])[]({})”, you should return true.

Given the string “([)]” or “((()”, you should return false.

There is are Stack implementation currently available in Apex so we can use a List to push and pop characters

Solution

public class Stack {
    private List<Object> items {get; set;}
    
    public Stack() {
        this.items = new List<Object>();
    }
    
    public Integer size() {
        return this.items.size();
    }

    public Boolean isEmpty() {
        return size() == 0;
    }
        
    public void push(Object itemToPush) {
        this.items.add(itemToPush);
    }
    
    public Object pop() {
        if (isEmpty()) {
            throw new EmptyStackException();
        }
        
        return this.items.remove(size() - 1);
    }
    
    public Object peek() {
        if (isEmpty()) {
            throw new EmptyStackException('Stack is empty');
        }
        
        return this.items.get(size() - 1);
    }    
}

public class EmptyStackException extends Exception {}

public static Map<String, String> mapBrackets(){
    Map<String, String> bracketMap = new Map<String, String>();
    bracketMap.put('}', '{');
    bracketMap.put(')', '(');
    bracketMap.put(']', '[');
    return bracketMap;
}

public static Boolean checkClosingBrackets(String bracketStr) {
    Map<String, String> bracketMap = mapBrackets();
    Stack customStack = new Stack();
    
    for (Integer i=0; i < bracketStr.length(); i++){
        String str = bracketStr.substring(i,i+1);
        System.debug('> ' + str);
        if (!bracketMap.containsKey(str)){
            customStack.push((String)str);
        } else {
            String pop = (String)customStack.pop();
            String mappedVal = bracketMap.get(str);
            
            if (!mappedVal.equals(pop)){
                return false;
            }
        }
    }
    
    if (!customStack.isEmpty()){
        return false;
    }
    
    return true;
}

Testing

System.debug(checkClosingBrackets('([])[]({})')); //true
System.debug(checkClosingBrackets('([])[]({}'));  //false

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: