您的位置:首页 > Web前端 > JavaScript

[leetcode javascript解题]Valid Parentheses

2016-12-21 19:41 483 查看
leetcode 20题 Valid Parentheses 描述如下

Given a string containing just the characters
'('
,
')'
,
'{'
,
'}'
,
'['
and
']'
, determine if the input string is valid.

The brackets must close in the correct order,
"()"
and
"()[]{}"
are all valid but
"(]"
and
"([)]"
are not.

解题思路其实比较简单就是建立一个栈结构,储存”([{“。首先如果字符串的length为奇数,显然可以直接返回false了。

接着是优化代码。个人是很讨厌冗长的switch语句,所以用正则表达式和charCodeAt来处理了,注意到
'('
,
')'
,
'{'
,
'}'
,
'['
以及
']'
, 的 Unicode 编码分别为40,41,91,93,123和125。所以在判断时可以根据同样的括号类型编码值相减小于等于2的原理来判断。代码看上去就简洁了很多。

循环过程中,如果条件匹配就出栈,不匹配的话基本就意味着有多余的符号,直接返回false。如果都匹配,还要查看最终的判断条件也就是stack中是否还有元素剩余。

/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if (s.length % 2 === 1 || /[\}\]\)]/.test(s[0])) {
return false;
}
var stack = [];
for (var i = 0; i < s.length; i++) {
if (/[\{\[\(]/.test(s[i])) {
stack.push(s[i]);
} else {
var len = stack.length;
if (Math.abs(stack[len - 1].charCodeAt(0) - s[i].charCodeAt(0)) <= 2) {
stack.pop();
} else {
return false;
}
}
}
if (stack.length === 0) {
return true;
} else {
return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode javascript 20题