Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
Solution
/**
* Validate Parentheses
* @param {string} s
* @return {boolean}
* @time complexity: O(n)
* @space complexity: O(n)
*/
function isValid(s) {
const pairs = {
'(': ')',
'[': ']',
'{': '}'
};
const stack = [];
for (let c of s) {
const opening = pairs[c];
if (opening) {
stack.push(opening);
} else if (c !== stack.pop()){
return false;
}
}
return stack.length === 0;
}
Test Case
const assert = require('chai').assert;
describe('Valid Parentheses', () => {
it('should return true when \'()\' is given', () => {
assert.strictEqual(isValid('()'), true);
});
it('should return true when \'()[]{}\' is given', () => {
assert.strictEqual(isValid('()[]{}'), true);
});
it('should return false when \'(]\' is given', () => {
assert.strictEqual(isValid('(]'), false);
});
it('should return false when \'([)]\' is given', () => {
assert.strictEqual(isValid('([)]'), false);
});
it('should return true when \'{[]}\' is given', () => {
assert.strictEqual(isValid('{[]}'), true);
});
});
Valid Parentheses
✓ should return true when '()' is given
✓ should return true when '()[]{}' is given
✓ should return false when '(]' is given
✓ should return false when '([)]' is given
✓ should return true when '{[]}' is given
5 passing (13ms)