JS 1°
var isValid = function(s) {
const stack = [];
if(s.length%2==0){
for (let i = 0; i < s.length; i++) {
const c = s[i];
if (c == '{' || c == '[' || c == '(') {
stack.push(c);
} else {
if (stack.length == 0) {
return false;
}
const top = stack[stack.length - 1];
if (top == '(' && c == ')' || top == '[' && c == ']' || top == '{' && c == '}') {
stack.pop();
} else {
return false;
}
}
}
}else{
return false;
}
return stack.length == 0;
};
一个栈的应用,但是出栈条件想了好久,看了题解原来是这样子。。。判断一下s.length单双数,可以快一些。
JS 2°
var isValid = function (s) {
const cache = []
const map = new Map()
map.set("(", ")")
map.set("[", "]")
map.set("{", "}")
for (let i = 0; i < s.length; i++) {
if (map.has(s[i])) cache.push(s[i])
else {
if (cache.length === 0) return false
if (map.get(cache[cache.length - 1]) === s[i]) cache.pop()
else return false
}
}
if (cache.length) return false
return true
};
看了题解,更快的方式,用了map,思路是一样的。时间复杂度一样都是On推测是进出栈的方法节省了时间。
python
class Solution:
def isValid(self, s: str) -> bool:
stack = []
dic = {
'(':')',
'[':']',
'{':'}',
}
for i in s:
if i in dic:
stack.append(i)
else:
if len(stack)==0:
return False
else:
if dic.get(stack[len(stack)-1])==i:
stack.pop()
else:
return False
return not stack
python用的是字典,有一个大坑,python小白(我)才知道的是,python的True 和False 首字母要大写啊要大写要大写!