leetcode20. 有效的括号

20. 有效的括号

func isValid(s string) bool {
    //用哈希表对右括号做一个映射
	hash := map[byte]byte{')': '(', ']': '[', '}': '{'} 
	stack := make([]byte, 0)
	if s == "" {
		return true
	}

	for i := 0; i < len(s); i++ {
		if s[i] == '(' || s[i] == '[' || s[i] == '{' { //若是左括号,压栈
			stack = append(stack, s[i])
		} else if len(stack) > 0 && stack[len(stack)-1] == hash[s[i]] {
			stack = stack[:len(stack)-1]
		} else {
			return false
		}
	}
	return len(stack) == 0
}

若是右括号,且stack不为空(为空说明右括号多,返回false),与栈顶元素做匹配,匹配上就出栈(匹配不上返回false)

最后返回 len(stack) == 0,若不为空说明左括号多,返回false

代码巧妙的概括了三种不匹配的情况

  • 左括号多(体现在最后返回stack长度不为0)
  • 右括号多(栈中元素匹配完了len(stack)==0)
  • 与栈顶左括号不匹配

版权声明:本文为wjy23929812原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。