有效的括號golang實現


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

有效字符串需滿足:

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。
注意空字符串可被認為是有效字符串。
輸入: "()"
輸出: true
輸入: "()[]{}"
輸出: true
輸入: "(]"
輸出: false
輸入: "([)]"
輸出: false
輸入: "{[]}"
輸出: true
首先理解題意:
  1. 首先空字符串必定為true
  2. 其次括號成對出現
  3. 有可能在括號中間出現成對的括號

那我們就可以想象有一個容器,一直把字符串的每個字符塞進去,當成對出現的時候就去除,當容器內沒有任何元素了,那就說明字符串是有效的括號組合,否則不是

    //特殊情況,空字符串返回true
    if len(s) == 0 {
        return true
    }

    //配對字典
    m := map[string]string{")": "(", "]": "[", "}": "{"}
    //
    var stack []string
    //把字符串的每個字符放進棧中,每放一個就判斷與前一個是不是配對的
    for i := 0; i < len(s); i++ {
        if len(stack) == 0 {
            stack = append(stack, string(s[i]))
        } else {
            //判斷是否配對
            //如果是相同的話,那就去除棧的最后一個元素
            //如果不相同的話,那就把源字符串的對應元素加進棧中
            if stack[len(stack)-1] == m[string(s[i])] {
                stack = stack[:len(stack)-1]
            } else {
                stack = append(stack, string(s[i]))
            }
        }
    }
    //判斷棧中是否沒有元素
    //是的話返回true
    //否則返回false
    if len(stack) == 0 {
        return true
    } else {
        return false
    }

這里有個小技巧,就是每次我們放進容器的字符,當配對成功的時候,肯定是塞進右邊的符號,所以可以構造一個以右邊括號為key,左邊括號為值得字典


免責聲明!

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



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