其实这题目本身不是很难 我在这里分享一个比较秒的解题方法
题目描述:
-
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。
-
有效字符串需满足:
-
左括号必须用相同类型的右括号闭合。
-
左括号必须以正确的顺序闭合。
-
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
思路:
- 定义一个数组模拟栈,用来与左括号配对的右括号,只需要一次遍历字符串
- 如果字符是
'('
,则用push()
方法把')'
压入栈中 - 如果字符是
'['
,则用push()
方法把']'
压入栈中 - 如果字符是
'{'
,则用push()
方法把'}'
压入栈中 - 否则就用
pop()
取到当前栈顶字符与当前遍历字符作比较,如果不相同就返回false
- 当括号字符串遍历完之后,我们根据数组是否为空就能确保代码运行是否正确。
代码如下:
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('()[]{}'));