给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
题解
- 方法一:
- 使用 replace 匹配字符串并将匹配的字符串删除
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
while (s.length !== 0) {
let len = s.length;
s = s.replace('()', '');
s = s.replace('[]', '');
s = s.replace('{}', '');
if (s.length == len) break;
}
if (s.length == 0) return true;
else return false;
};
- 方法二:栈
- 将字符串逐个存入栈中,如果遇到右括号,检查是否存在正确的左括号匹配
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
let arr = [];
for (let i = 0; i < s.length; i++) {
if (s[i] = ')') {
if (arr[arr.length - 1] == '(') arr.pop();
else return false;
} else if (s[i] = ']') {
if (arr[arr.length - 1] == '[') arr.pop();
else return false;
} else if (s[i] = '}') {
if (arr[arr.length - 1] == '{') arr.pop();
else return false;
} else arr.push(s[i]);
}
if (arr.length == 0) return true;
else return false;
};
优化:提高执行效率
- pop() 方法返回被删除的元素
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
let arr = [];
for (let i = 0; i < s.length; i++) {
switch (s[i]) {
case ')':
if (arr.pop() !== '(') return false;
break;
case ']':
if (arr.pop() !== '[') return false;
break;
case '}':
if (arr.pop() !== '{') return false;
break;
default:
arr.push(s[i]);
}
}
return !arr.length;
};