栈算法

栈算法

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)
}

posted @ 2024-01-30 20:44  Jeff的技术栈  阅读(4)  评论(0编辑  收藏  举报
回顶部