给定一个包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1. 左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
示例 :
输入: s = "()"
输出: true
输入: s = "()[]{}"
输出: true
输入: s = "(]"
输出: false
输入: s = "([)]"
输出: false
输入: s = "{[]}"
输出: true
/**
* @param {string} s
* @return {boolean}
*/
// 栈内存:先进后出,后进先出
// 如果到最后为空数组则有效
var isValid = function(s) {
const types = {
'{': '}',
'[': ']',
'(': ')',
}
const pushKey = Object.keys(types);
function findKeyByValue(value) {
for(let key in types) {
if(types[key] === value) {
return key
}
}
return '';
}
// 如果为空字符串直接返回 false
if(!s) {
return false;
}
// 如果给定字符串为奇数个直接返回 false
if(s%2 === 1) {
return false;
}
let length = s.length;
let stack = [];
for(let i = 0; i < length; i ++) {
let ele = s[i];
if(pushKey.includes(ele)) {
stack.push(ele)
} else {
if(stack.pop() !== findKeyByValue(ele)) {
return false;
}
}
}
return !stack.length
};