My Code
var isValid = function(s) {
let leftStr = "({[";
let rightStr=")}]";
let container = []
for(let i=0;i<s.length;i++){
if(leftStr.indexOf(s[i])>-1){
container.push(s[i]);
}else{
if(container.length<=0){
return false;
}else{
let val = container.pop();
if(rightStr[leftStr.indexOf(val)]!==s[i]){
return false;
}
}
}
}
return container.length === 0;
};
Excellent Code
var isValid = function(s) {
let rulemap={'(':')','{':'}','[':']'},container=[];
for(const char of s){
if(char in rulemap){
container.push(char)
}else if(rulemap[container.pop()]!==char){
return false
}
}
return container.length === 0;
};
无论从时间还是空间上,都是第二种方法比较优
小结
- javascript for 循环遍历字符串用of能够直接获取字符,并且用const来进行修饰
- 数据的组织方式上,有对应的关系的用Map,比两个单独的数组好
- key in map可以用来判断Map中是否存在此key