给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

56 阅读1分钟

题目如标题所示:

有效字符串需满足

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。
  var isValid = function(s) {
    if(s.length % 2 === 1){
       // 如果字符串长度是奇数,直接返回false
       return false
    }else{
       //建立一个容器stack存放左括号
       let stack = []; 
   
       let strArr = s.split("");
       for(let i = 0; i<strArr.length;i++){
        let current = strArr[i];
            if(current === '(' || current === '[' || current === '{'){
                stack.push(current) 
            }else{
                //判断当前括号与刚才存放的括号是否有正确闭合
                const left = stack[stack.length - 1] ;
                if(left === '(' && current === ')' ||left === '[' && current === ']' || left === '{' && current === '}' ){
                    stack.pop();  
                }else{
                    return false
                }
            }
        }   
        //判断是否有残余,如果容器内为0,则对比完毕。
        return stack.length == 0
    };
 }

测试用例
isValid('{[]}'); // true
isValid('{[]'); // false
isValid("(]"); // false

时间复杂度空间 与 空间复杂度 都为 O(n)