携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情
本人入行以来已有数月,奈何技术一直平平,和资深程序员讨教方法,他们推荐我去刷算法,算法是能够提高程序员的逻辑思维能力,借助平台的这次活动,记录一下自己在学习算法路程上的心得于体会
题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 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
};
坚持努力,无惧未来!