括号匹配 Go语言
-
题目:给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s ,判断字符串是否有效。 -
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
// 利用 map 和栈
func isValid(s string) bool {
n := []byte{}
if len(s)%2 == 1 {
return false
}
bracket := map[byte]byte{
')': '(',
']': '[',
'}': '{',
}
for i := 0; i < len(s); i++ {
if bracket[s[i]] > 0 {
if len(n) == 0 || bracket[s[i]] != n[len(n)-1] {
return false
}
n = n[:len(n)-1]
} else {
n = append(n, s[i])
}
}
return len(n) == 0
}
// 利用 ASCLL码 的差和栈
func isValid(s string) bool {
n := []byte{}
for i := 0; i < len(s); i++ {
if s[i] == '(' || s[i] == '[' || s[i] == '{' {
n = append(n, s[i])
} else {
if len(n) == 0 {
return false
} else if s[i]-n[len(n)-1] == 1 || s[i]-n[len(n)-1] == 2 {
n = n[:len(n)-1]
} else {
return false
}
}
}
return len(n) == 0
}