题目三:
解法一:(栈)
var isValid = function(s) {
const stack = []
for (let i = 0; i < s.length; i++) {
let c = s[i]
switch (c) {
case '(':
stack.push(')')
break
case '[':
stack.push(']')
break
case '{':
stack.push('}')
break
default:
if(c !== stack.pop()) {
return false
}
}
}
return stack.length === 0
};
解法二:(hashmap)
var isValid = function(s) {
const stack = []
const map = {
"(": ")",
"{": "}",
"[": "]"
}
for (const x of s) {
if (x in map) {
stack.push(x)
continue
}
if (map[stack.pop()] !== x) {
return false
}
}
return !stack.length
};
// 或者
var isValid = function (s) {
var map = {
"(": ")",
"[": "]",
"{": "}"
}
var leftArr = []
for (var ch of s){
if (ch in map) leftArr.push(ch); //为左括号时,顺序保存
else { //为右括号时,与数组末位匹配
if(ch != map[leftArr.pop()]) return false;
}
}
return !leftArr.length //防止全部为左括号
};
解法三:(替换)
解题思路:找到最内层的括号对,消去,重复此过程,若存在无法消去的字符则说明字符串无效。
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;
};