棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)
思路:遍歷字符串,如果是左括號(hào)則放進(jìn)棧中,如果是右括號(hào)則從棧中推出元素,看兩者是否匹和,
如果均匹和且棧中為空,返回true
// 時(shí)間復(fù)雜度為O(n)
// 空間復(fù)雜度為O(n)
func isValid2(s string) bool {
m := make(map[byte]byte)
m['('] = ')'
m['['] = ']'
m['{'] = '}'
// 數(shù)組實(shí)現(xiàn)棧功能
sli := make([]byte, 0)
if len(s) == 0 {
return true
}
if len(s)%2 == 1 {
return false
}
for i, b := range s {
if i == 0 && (s[i] == ')' || s[i] == ']' || s[i] == '}') {
return false
}
if b == '(' || b == '[' || b == '{' {
sli = append(sli, byte(b))
} else {
// 這里實(shí)現(xiàn)棧的功能
left := sli[len(sli)-1]
sli = sli[:len(sli)-1]
if m[left] != byte(b) {
return false
}
}
}
if len(sli) != 0 {
return false
}
return true
}
提交leetcode,通過(guò)