My answer / AC
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let stack = [];
let map = {
'(':')',
'[':']',
'{':'}'
}
s=s.split("").forEach((c,i)=>{
if(c.match(/[\(\[\{]/)) {
stack.push(c);
} else if (c.match(/[\)\]\}]/)){
let compare = stack.pop();
if(!(map[compare]==c)) {
stack.push(compare);
stack.push(c);
}
}
});
return stack.length==0;
};
栈的使用,很重要~
Best answer
var isValid = function(s) {
while(s.match(/\(\)|\[\]|\{\}/g)){
s = s.split('()').join('').split('[]').join('').split('{}').join('');
}
if(!s) return true;
return false;
};
我一开始的想法就是类似的写法,可惜没能够实现出来。这个写得很好!
Recap
关于这种字符串两两配对的,要考虑是stack吼!!
网友评论