题目如标题所示:
有效字符串需满足
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
var isValid = function(s) {
if(s.length % 2 === 1){
// 如果字符串长度是奇数,直接返回false
return false
}else{
//建立一个容器stack存放左括号
let stack = [];
let strArr = s.split("");
for(let i = 0; i<strArr.length;i++){
let current = strArr[i];
if(current === '(' || current === '[' || current === '{'){
stack.push(current)
}else{
//判断当前括号与刚才存放的括号是否有正确闭合
const left = stack[stack.length - 1] ;
if(left === '(' && current === ')' ||left === '[' && current === ']' || left === '{' && current === '}' ){
stack.pop();
}else{
return false
}
}
}
//判断是否有残余,如果容器内为0,则对比完毕。
return stack.length == 0
};
}
测试用例
isValid('{[]}'); // true
isValid('{[]'); // false
isValid("(]"); // false
时间复杂度空间 与 空间复杂度 都为 O(n)