题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/va…
思路分析:
- 遇到左括号入栈
- 遇到右括号则查看栈顶
- 如果栈顶的左括号和右括号匹配,则弹出栈顶
- 如果栈顶的左括号和右括号不匹配,则匹配失败
- 如果栈空则匹配成功,不空则匹配失败
js数组实现
var isValid = function(str){
var arr = []; // 创建一个空数组模拟栈
for(let i=0;i<arr.length;i++){
let item = arr[i];
if(item === '(' || item === '[' || item === '{'){
arr.push(item);
}else if(item === ')'){
if(arr.length === 0 || arr[arr.length-1] !== '('){
return false;
}else{
arr.pop()
}
}else if(item === '}'){
if(arr.length === 0 || arr[arr.length-1] !== '{'){
return false;
}else{
arr.pop();
}
}else if(item === ']'){
if(arr.length === 0 || arr[arr.length-1] !== '['){
return false;
}else{
arr.pop();
}
}
}
return arr.length === 0;
}
使用 栈 实现
function is_ok (str) {
var _stack = new Stack();
for(var i=0;i<str.length;i++){
var item = str[i];
if(item === '(' || item === '{' || item === '['){
_stack.push(item)
}else if(item === ')'){
if(_stack.isEmpty() || _stack.top() !== '('){
return false
}else{
_stack.pop()
}
}else if(item === '}'){
if(_stack.isEmpty() || _stack.top() !== '{'){
return false
}else{
_stack.pop()
}
}else if(item === ']'){
if(_stack.isEmpty() || _stack.top() !== '['){
return false
}else{
_stack.pop()
}
}
}
return _stack.size() === 0
}