本人入行以来已有数月,奈何技术一直平平,和资深程序员讨教方法,他们推荐我去刷算法,算法是能够提高程序员的逻辑思维能力,借助平台的这次活动,记录一下自己在学习算法路程上的心得于体会
题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
输入: s = "()" 输出: true 输入: s = "(]" 输出: false
题解
我们都知道我们的代码编译器都有这一个括号配对的功能,它会去匹配我们相对应的括号,我们这里了创建一个
hashMap
,把括号配对放进去,在创建一个stack
,使用for
循环进行遍历字符串,对于每一个字符,如果map
中有这个key,那么说明它是一个左括号,从map
中取得相对应的右括号,因为计算机不理解括号的配对情况的,计算机只会判断大于等于小于这三种状态,所以向判断括号配对这种方式只能人为的去处理,左边括号当成key,右边括号当成value,这要就可以通过左边括号取到相对应的右边括号,把他push进到stack
中,否则的话,它就是一个右括号,需要pop
出stack
中的第一个字符看它是否等于当前的字符,如果不符合,则返回false,当循环结束后,如果stack
不是空,那么就说明还剩下一些左括号没有被闭合,需要返回false
,否则返回true
/** * @param {string} s * @return {boolean} */ var isValid = function(s) { const mappings=new Map() mappings.set('(',")") mappings.set("{","}") mappings.set('[',"]") const stack=[] for(let i =0;i<s.length;i++){ //如果map中拥有这个key,这个就是左括号 if(mappings.has(s[i])){ //就需要将value值push到stack中 stack.push(mappings.get(s[i])) }else{ //如果不存在就是右括号 if(stack.pop()!==s[i]){ return false } } } //循环结束后,检查stack里面的是否全部匹配完成 if(stack.length!==0)return false; return true };
坚持努力,无惧未来!