20、有效的括号
题目描述:
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
思路:
- 定义一个数组模拟栈,用来与左括号配对的右括号,只需要一次遍历字符串
- 如果字符是
'(',则用push()方法把')'压入栈中 - 如果字符是
'[',则用push()方法把']'压入栈中 - 如果字符是
'{',则用push()方法把'}'压入栈中 - 否则就用
pop()取到当前栈顶字符与当前遍历字符作比较,如果不相同就返回false - 当括号字符串遍历完之后,我们根据数组是否为空就能确保代码运行是否正确。
代码如下:
js
var isValid = function (s) {
var rightSymbols = []; //定义存放右括号的数组
for (var i = 0; i < s.length; i++) {
if (s[i] == '(') {
rightSymbols.push(')');
} else if (s[i] == '{') {
rightSymbols.push('}');
} else if (s[i] == '[') {
rightSymbols.push(']');
} else if (rightSymbols.pop() != s[i]) {
//取出栈顶元素与当前遍历字符比较
return false;
}
}
return !rightSymbols.length; //如果还有未匹配的括号就返回false
};
console.log(isValid('()[]{}'));
russ