棧特點使用:給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。


題目:

給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認為是有效字符串。

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s==" "||s==""){
        return true;
    } 
    let stack = [];
    let left = ["{","(","["];
    let right = ["}",")","]"];
    for(let i =0;i<s.length;i++){
       
        if(left.indexOf(s[i])>-1){
            stack.push(s[i]);
        }else if(s[i] === " "){
            continue;
        }else{
            if(stack.pop() != left[right.indexOf(s[i])] ){
                return false;
            }
        }
    }
    if(stack.length!=0){
        return false;
    }
    return true;
};

這里主要是使用了棧的先進后出的特點,遍歷s字符串,當遇到左括號的時候就將左括號進棧,當遇到右括號的時候,就檢測當前棧頂的元素是否是匹配的右括號的左括號(或則是說當前棧頂的左括號是否與遍歷到的右括號匹配),匹配的話就在進行循環,不匹配的話就直接返回false,因為會出現(]或則是(}這樣的情況,這是不允許的。

看到一個思路很厲害的人的代碼:直接匹配的元素用""代替,最后判斷一下是否是”“即可。

class Solution:
    def isValid(self, s):
        while '{}' in s or '()' in s or '[]' in s:
            s = s.replace('{}', '')
            s = s.replace('[]', '')
            s = s.replace('()', '')
        return s == ''
//來源:https://leetcode-cn.com/u/wings-kbftq3byhh

 

 

 

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-parentheses
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM