本题连接 leetcode-cn.com/problems/va…
这道题要用到栈这个数据结构去解题。有小括号,中括号和大括号三种括号,每种括号有左和右两种形态,左右括号要匹配才合法。咱们的思路以下步骤:程序员
分析一下时间复杂度,每个元素都要入栈一次,因此时间复杂度是o(n)算法
思路理清楚了,咱们开始写代码:bash
var isValid = function(s){
let stack = [];
for(let item of s){
// 左括号正常入栈
if(item === '(') stack.push(')');
else if(item === '[') stack.push(']');
else if(item === '{') stack.push('}');
else { // 右括号
// 第一个字符就是右括号的状况
if (stack.length === 0) return false ;
// 栈顶的左括号与右括号作匹配
if (stack.pop() !== item) return false;
}
}
// 最后栈里的元素要为空才返回true
return !stack.length;
}
复制代码
最终顺利经过,一样的思路,咱们换一种写法:数据结构
var isValid = function(s){
let stack = [];
let map = {
'(':')',
'[':']',
'{':'}'
};
for( let i=0; i<s.length; i++ ){
let cur = s[i];
if(map[stack[stack.length - 1]] === cur) stack.pop();;
else stack.push(cur);
}
return !stack.length;
}
复制代码
第二种方法是社区大佬写的,很是巧妙。用一个对象将配对的括号经过键值对存储起来,让代码更简洁,小弟现阶段只能仰望。ui
作算法题必定要先把思路理顺了再去写,作这道题加写这篇文章我整整花了两个多小时,就是由于一拿到题就开始写,没有去分析,中间浪费了大量的时间在发呆、迷茫上面。leetcode真恐怖,这还只是简单难度,两天作一道leetcode可能要成为一个flag了。作一个程序员真难🙂spa