Skip to content

Instantly share code, notes, and snippets.

@aykutyaman
Created August 28, 2018 04:18
Show Gist options
  • Save aykutyaman/3060d3cbe28cc0664276fc90b71cb386 to your computer and use it in GitHub Desktop.
Save aykutyaman/3060d3cbe28cc0664276fc90b71cb386 to your computer and use it in GitHub Desktop.
const isOpening = (s, m) => m[s];
const isClosing = (s, m) => (
Object.values(m).includes(s)
);
const isValid = (last, s, m) => (
m[last] !== s
);
const balancedParens = s => {
const mapping = {
'(': ')', '[': ']'
};
let stack = [];
let last;
for (var i = 0; i < s.length; i++) {
if (isOpening(s[i], mapping)) {
stack.push(s[i]);
} else if (isClosing(s[i], mapping)) {
last = stack.pop();
if (isValid(last, s[i], mapping)) {
return false;
}
}
}
return stack.length === 0 ? true : false;
};
let s = '()';
console.log(balancedParens(s) === true);
s = '(())';
console.log(balancedParens(s) === true);
s = '(';
console.log(balancedParens(s) === false);
s = '(()';
console.log(balancedParens(s) === false);
s = '[';
console.log(balancedParens(s) === false);
s = '[]';
console.log(balancedParens(s) === true);
s = '[)';
console.log(balancedParens(s) === false);
s = '(((]))';
console.log(balancedParens(s) === false);
s = '{ac[bb]}';
console.log(balancedParens(s) === true);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment