[路飞]_LeetCode20.有效的括号

462 阅读1分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

LeetCode20.有效的括号

题目要求
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
示例
输入:s = "()"
输出:true
思路
1.先判断这个字段s是不是成对出现的,如果不是直接return false
if (s.length % 2 == 1) return false;
2.然后便利s数组,判断元素是否是左边的括号,然后保存下来
let arr = [];
for (let item of s) {  
    if (item == '(' || item == '[' || item == '{') {    
        arr.push(item);  
    }
}
3.接着判断是不是属于右边类型的括号,如果是的话,再判断arr数组的最后一个元素是不是和正在遍历的右边的元素符合一对,如果不是return false
... else {  
    let arrLen = arr.length - 1;  
    if (item == ')' && arr[arrLen] != '(') return false;  
    if (item == ']' && arr[arrLen] != '[') return false;  
    if (item == '}' && arr[arrLen] != '{') return false;
}
4.如果左边的元素和数组的最后一个元素符合一对括号的话,就把数组的最后一个元素删除,最后如果数组的长度为0说明说有的括号都符合成对出现的要求
... else {  
    ...  
    arr.pop();
   }
return !arr.length;

完整代码

function isValid(s) {  
    if (s.length % 2 == 1) return false;  
    let arr = [];  
    for (let item of s) {    
        if (item == '(' || item == '[' || item == '{') {      
            arr.push(item);    
        } else {      
            let arrLen = arr.length - 1;      
            if (item == ')' && arr[arrLen] != '(') return false;      
            if (item == ']' && arr[arrLen] != '[') return false;      
            if (item == '}' && arr[arrLen] != '{') return false;      
            arr.pop();    
        }  
    }  
    return !arr.length;
}