golang中的棧與php標準庫內的棧結構,以雙向連結串列結構體(或類)充當容器棧。
但有時面對輕量級問題,可用php中的陣列,亦可用golang中的切片來模擬棧,小巧好用。
題面
給定一個只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
來源:力扣(LeetCode)
連結:leetcode-cn.com/problems/valid-par...
分析
- 用
map
結構充當配對字串對映 - 切片棧頂元素,與後續比對成則操作出棧,其餘依次入棧
- 計切片棧長度空,為匹配成功
上碼
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
測評
本作品採用《CC 協議》,轉載必須註明作者和本文連結