题目描述:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
解题思路:
- 判断如果不是成对即length%2===1出现则返回false;
- 循环字符串,如果为( { [ 这三者则入栈;
- 否则,判断如果stack的最后一个元素和当前元素相等则表示是一对,将最后一个元素出栈;
- 否则返回false;
- 最后判断stack的长度是否为0, 不为0则表示没有匹配完全,返回false
代码:
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
var stack = [];
if(s.length%2 === 1) return false
for(var i = 0; i<s.length; i++){
if(s[i] === '(' || s[i] === '{' || s[i] === '['){
stack.push(s[i]);
}else{
var t = stack[stack.length-1];
if((t === '(' && s[i] === ')') || t === '{' && s[i] === '}' || t === '[' && s[i] === ']'){
stack.pop();
}else{
return false;
}
}
}
return stack.length===0;
};
var s = "()";
console.log(isValid(s));
var s1 = "()[]{}";
console.log(isValid(s1));
var s2 = "(]";
console.log(isValid(s2));