判断括号是否匹配
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
思路:
括号一定是成对出现的,如果不是则返回false
字符串中遇到的闭合括号,一定是和它的前一个开始括号是一对.
代码:
<script>
function isValid(str) {
if (!str.trim()) return -1;//去除字符串两端可能的空字符
var stack = [];
var keys = [')', ']', '}'];//keys和values对应索引是刚好相反
var values = ['(', '[', '{'];
var flag = true;// 不匹配则返回false
for (var i = 0; i <= str.length; i++) {//注意这里是 <= 的
var char = str.charAt(i);
if (values.includes(char)) {
// 开始
stack.push(char);
} else {
var index = keys.indexOf(char);
if (index > -1) {
// 闭合
if (!stack.length || values[index] != stack.pop()) {
flag = false;
break;//括号不匹配,终止循环!!!
}
}
}
}
return flag;
}
var str = '((){})({}';//false
console.log(isValid(str));
</script>