题目描述及示例
这道题我的想法是使用栈的特点来解决;
1. 遍历字符串
2. 遇到`(` `[` `{` 进栈,
3. 遇到`)` `]` `}` 出栈
4. 判断所遍历到的字符与出栈的字符
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let flag = true;
let arr = []; //栈
for(let i = 0; i < s.length; i++){ // 遍历字符串
if(s[i]==='('||s[i]==='['||s[i]==='{'){
arr.push(s[i]) //进栈
}else{
let headChar = arr.pop(); //出栈
//判断
if (s[i]===']'&&headChar!=='['){
flag = false;
}
if (s[i]===')'&&headChar!=='('){
flag = false;
}
if (s[i]==='}'&&headChar!=='{'){
flag = false;
}
if (!flag){
break;
}
}
}
if(arr.length>0){ //最后判断栈是否为空,如果不为空则证明仍有未匹配的括号
flag = false;
}
return flag;//返回结果
};