给定一个字符串里面可能包含“()”、“{}”、“[]”三种括号,请使用JavaScript实现一个函数,检查字符串的括号是否成对出现。
思路:栈原理,先进后出
实现:使用switch case进行判断
function isValid(s) {
let a = [];//存储左括号出现的地方
let len = s.length;
let k = 0;
// flag为0时为不匹配
let flag = 1;
for (let i = 0; i < len && flag; i++) {
//判断字符串的首尾可直接判断是否匹配
if (s[0] == ')' || s[0] == '}' || s[0] == ']' || s[len - 1] == '(' || s[len - 1] == '{' || s[len - 1] == '[') {
return false
}
switch (s[i]) {
case '(':
a[k] = i;
k++;
break;
case ')':
var j = a[k - 1];
// 如果匹配到右括号就把数组清空后续相同
if (s[j] === '(') {
a[k] = 0;
k--;
} else {
flag = 0;
}
break;
case '{':
a[k] = i;
k++;
break;
case '}':
var j = a[k - 1];
if (s[j] === '{') {
a[k] = 0;
k--;
} else {
flag = 0;
}
break;
case '[':
a[k] = i;
k++;
break;
case ']':
var j = a[k - 1];
if (s[j] === '[') {
a[k] = 0;
k--;
} else {
flag = 0;
}
break;
}
}
// 如果数组里面有东西则不匹配
if (k !== 0) {
flag = 0;
}
if (flag === 0) {
return false;
} else {
return true;
}
}
var ss = '(a[b(c)d]e{f}g)';
let ss1 = '(a[b(cd)e{f}g))';
console.log(isValid(ss));//true
console.log(isValid(ss1));//false