栈算法
栈算法
1.有效的括号
/*
题目:有效的括号
leetcode:20
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
输入:s = "()"
输出:true
输入:s = "(]"
输出:false
思路:利用栈思想。匹配到左括号加入栈,匹配到右括号,栈顶元素和当前右括号匹配,不匹配false,否则true。最后循环玩习栈,栈为空则true,否则false
*/
func isValid(s string) bool {
m := map[byte]byte{')': '(', '}': '{', ']': '['}
li := []byte{}
for i := 0; i < len(s); i++ {
v, ok := m[s[i]]
if !ok {
//左括号,加入栈
li = append(li, s[i])
} else {
//右括号,最后一个出栈
index := len(li) - 1 //栈顶下标
if index < 0 {
return false
}
latest := li[index]
if latest == v {
//出栈成功
li = li[:index]
} else {
//出栈失败
return false
}
}
}
return len(li) == 0
}
func main() {
s := "()()[]]"
n := isValid(s)
fmt.Println(n)
}
选择了IT,必定终身学习