前言
本文正在参与掘金团队号上线活动,点击查看大厂春招职位。
题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
题解
思路:
主要是用栈的思想!
1、遇到左括号就压入栈中。
2、每一个左括号都只能有对应的右括号去消化,遇到对应的右括号就弹出栈作比较,看是否匹配。
AC代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const stack = [];
if (s.length % 2) return false;
for (let item of s) {
switch (item) {
case '[':
case '{':
case '(':
stack.push(item);
break;
case ']':
if(stack.pop() !== '[') return false;
break;
case '}':
if(stack.pop() !== '{') return false;
break;
case ')':
if(stack.pop() !== '(') return false;
break;
}
}
return !stack.length;
};
总结
这个题目主要的思想就是栈,如果想不到就做不出来!给了自己一个引申思考,是不是匹配都可以用栈去尝试实现呢?平时就知道栈先进后出,队列先进先出,但是却很少能把它真正应用起来,这个题目做了很好的诠释。