给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 str ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
// 示例
输入:s = "()[]{}"
输出:true
输入:s = "()[]{}"
输出:true
输入:s = "(]"
输出:false
输入:s = "([)]"
输出:false
输入:s = "{[]}"
输出:true
/**
* 执行:108 ms
* 内存:43.1 MB
* */
function isValid(str) {
let temp;
do {
temp = str;
str = str.replace(/\(\)/g, '');
str = str.replace(/\[\]/g, '');
str = str.replace(/\{\}/g, '');
}while (temp !== str);
return str.length <= 0
};
/**
* 执行:132 ms
* 内存:43.3 MB
* */
function isValid(str) {
let temp;
do {
temp = str;
str = str.split('()').join('');
str = str.split('[]').join('');
str = str.split('{}').join('');
}while (temp !== str);
return str.length <= 0
};
/**
* 执行:76 ms
* 内存:37.9 MB
* */
function isValid(str) {
const stack = [];
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (char === '{' || char === '[' || char === '(') { // 是左括号,入栈
stack.push(char);
} else { // 是右括号
if (stack.length === 0) { // 此时栈空,无法匹配
return false;
}
const top = stack[stack.length - 1]; // 获取栈顶
if (top === '(' && char === ')' || top === '[' && char === ']' || top === '{' && char === '}') {
stack.pop(); // 如果栈顶是对应的左括号,被匹配,出栈
} else { // 不是对应的左括号,无法匹配
return false;
}
}
}
return stack.length === 0; // 栈空,则所有左括号找到匹配;栈中还剩有左括号,则没被匹配
};