Check for Balanced Parens

by Andrew Poes

CSS

.print {
    position: relative;
    display: inline-block;
    background-color: black;
    color: white;
    font-family: Helvetica, Helvetica-Neue, sans-serif;
    font-weight: bold;
    font-size: 24px;
    letter-spacing: -1.5px;
    padding: 4px 8px;
}

body {
    background-color: #eeeeee;
}
}

JavaScript

function Stack() {
    this.data = new Array();
	this.push = function(n) {
        if (n) {
	        this.data.push(n);
        }
    }
    this.pop = function() {
        return this.data.pop();
    }
    this.length = function() {
        return this.data.length;
    }
    this.peek = function() {
        return this.data.length > 0 ?  this.data[this.data.length - 1] : null;
    }
}

$(document).ready(function() {
//	print(checkBalancedParens("{}"));
//  print(checkBalancedParens("{(}"));
//  print(checkBalancedParens("{()[]()[]}"));
//  print(checkBalancedParens(")("));
    
    var code = "function Stack() {    this.data = new Array();	this.push = function(n) {        if (n) {	        this.data.push(n);        }    }    this.pop = function() {        return this.data.pop();    }    this.length = function() {        return this.data.length;    }    this.peek = function() {        return this.data.length > 0 ?  this.data[this.data.length - 1] : null;   }}"
    print(checkBalancedParens(code));
})

function checkBalancedParens(str) {
    var stack = new Stack();
    for (var i = 0; i < str.length; ++i) {
		var c = str.charAt(i);
        if (isOpeningParen(c)) {
            stack.push(c);
        }
        else if (isClosingParen(c)) {
            if (stack.length() == 0) {
                print("stack empty");
                return false;
            }
            else if (isMatchingPair(stack.peek(), c) == false) {
                print("mismatch");
                return false;
            }
            else {
                stack.pop();
            }
        }
    }
    return stack.length() == 0 ? true : false;
}

function isOpeningParen(char) {
    return char === "{" || char === "(" || char === "[";
}

function isClosingParen(char) {
    return char === "}" || char === ")" || char === "]";
}

function isMatchingPair(a, b) {
    if (a === "{" && b == "}") { return true; }
    if (a === "}" && b == "{") { return true; }
    if (a === "[" && b == "]") {...