leetcode探索隊列與棧 有效的括號

題目

給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。
示例 1:

輸入: “()”
輸出: true

示例 2:

輸入: “()[]{}”
輸出: true

分析

這題比較簡單,使用棧的LIFO的特性,如果是左邊的括號就進棧,如果是右邊的括號,就與棧頂元素比較,是他的另外一邊,就彈棧。繼續前進,利用了括號成對的特性,即最內層的左括號,下一個括號必然是他的右括號,否則就有問題。

解法

func isValid(s string) bool {
    var stack []byte
    
    for _, c := range []byte(s) {
        if c == '{' || c == '[' || c == '(' {
            stack = append(stack, c)
        } else if c == '}' {
            if !isLeft(stack, '{') {
                return false
            }
            stack = stack[:len(stack)-1]
        } else if c == ']' {
            if !isLeft(stack, '[') {
                return false
            }
            stack = stack[:len(stack)-1]
        } else if c == ')' {
            if !isLeft(stack, '(')  {
                return false
            }
            stack = stack[:len(stack)-1]
        }
    }
    if len(stack) > 0 {
        return false
    }
    return true
}

func isLeft(stack []byte, target byte) bool {
    if len(stack) > 0 && stack[len(stack)-1] == target {
        return true
    } else {
        return false
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章