有效的括號

pardon110發表於2020-09-10

golang中的棧與php標準庫內的棧結構,以雙向連結串列結構體(或類)充當容器棧。
但有時面對輕量級問題,可用php中的陣列,亦可用golang中的切片來模擬棧,小巧好用。

題面

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

有效字串需滿足:

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

來源:力扣(LeetCode)
連結:leetcode-cn.com/problems/valid-par...

分析

  1. map結構充當配對字串對映
  2. 切片棧頂元素,與後續比對成則操作出棧,其餘依次入棧
  3. 計切片棧長度空,為匹配成功

上碼

func isValid(s string) bool {
    m :=make(map[string]string, 3)
    m["("]=")"
    m["{"]="}"
    m["["]="]"
    stack :=[]string{}
    for i:=0;i<len(s);i++{
        if len(stack) >0 {
            if top,ok := m[stack[len(stack)-1]];ok {
                if top == string(s[i]) {
                    stack = stack[:len(stack)-1]
                    continue
                }
            }
        }
        stack=append(stack, string(s[i]))
    }
    if len(stack)>0{
        return false
    }
    return true
}

python

看似程式碼量少,但效能呵呵

class Solution:
    def isValid(self, s: str) -> bool:
        st = []
        m={k:v for k,v in zip('([{',')]}')}
        for c in s:
            if st and m.get(st[-1],None)==c:
                st.pop()
                continue
            st.append(c)
        if len(st)>0:
            return False
        return True

測評

提交時間 提交結果 執行時間 記憶體消耗 語言
幾秒前 通過 0 ms 2.3 MB Go
幾秒前 通過 40 ms 13.5 MB Python3
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章