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 == "]") {...