问题
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。
解法一
var isValid = function(s) {
let obj = {
'(': ')',
'[': ']',
'{': '}'
}
let stack = [];
for(let i in s) {
if(s[i] in obj) {
stack.push(s[i])
}else{
if(obj[stack.pop()] !== s[i]) {
return false;
}
}
}
return !stack.length
};
解题思路
栈的思想:先进后出
- 定义一个obj,对应每个完整的括号
- 定义一个数组
- 循环字符串,如果当前的字符存在于obj,把他存到数组中
- 如果不存在于obj,就拿出数组中最后一个,判断当前项是不是obj中对应
- 如果最后数组中没有数据了,说明一一对应,否则就是有没有对应的

解法二
var isValid = function (s) {
while (s.length) {
var temp = s;
s = s.replace('()', '');
s = s.replace('[]', '');
s = s.replace('{}', '');
if (s == temp) return false
}
return true;
};
解题思路
要想所有的括号都是对应,那最里层的一定是一对儿,然后把一对儿的一个一个删掉,最后还剩下,说明结果为false,不剩下,说明结果为true
