今日算法:有效的括号

题目(来源于力扣)

 

思路

首先分析问题判断字符串有效,即排除所有字符串无效的情况,而根据题意字符串无效的情况有三种:

1、左右字符串类型不匹配    如' { ( ) ] '           

2、左边符号多余  如‘ { { {()} ’     

3、右边符号多余  如‘ [ ( ) ] ] ] 

解决:利用来解决,利用栈的先进后出特性,来保证符号正确的闭合顺序。 

循环字符串中的每个字符,遇到左边类的符号就把相应的右边类符号通过push()来压入栈中,

遇到右边类的符号就与通过pop()弹出栈的元素进行比较,看是否匹配;最后通过返回栈的长度

是否为0来排除符号多余的情况。利用数组的push()和pop()方法来模拟压栈和弹栈以及栈的

先进后出

代码

var isValid = function(s) {
// 定义一个数组来模拟栈
    const stack = [];
    for (let i = 0; i < s.length; i++) {
      //  获取字符串中的每个字符
        let char = s.charAt(i)
      //   判断是否为(,{,[,若是在栈中添加对应的另一半
        if(char == '('){
           stack.push(')')
        }else if(char == '{'){
           stack.push('}')
        }else if(char == '['){
           stack.push(']')
        }else{
         //   遇到是右边符号的情况,判断其与栈中的是否相同,相同则可以匹配,不同则不匹配
            if(char !== stack.pop()){
               return false;
            }
        }
    }
   //  不直接返回true,要排除字符串长度为奇数的情况
   return stack.length==0;
}

总结 

常利用数据结构中的栈来解决类似有效的括号这种问题

猜你喜欢

转载自blog.csdn.net/weixin_53141315/article/details/132729837