leetcode之20有效的括号Golang

本题采用了栈的思想

在Go语言中使用栈是一件非常方便的事情,只需要使用切片就可以了

本题的思路将从括号字符串中读取到的字符进行出入栈操作

  如果是左括号“(、[、{”,就直接入栈

  如果是右括号,首先判断栈是否非空

    如果是空的,那么栈中没有左括号与当前遍历到的右括号匹配,就返回错误

    如果不是空的,那么就读取栈顶的左括号,判断这个左括号与当前遍历到的右括号是否匹配  

      如果不匹配,就直接返回错误

      如果匹配,就从栈顶弹出这个左括号

  遍历完整个括号字符串以后,检查栈是否为空

    如果栈为空,就返回正确,说明括号匹配

    如果栈不为空,就返回错误,说明栈中还遗留了左括号没有与之对应的右括号来匹配

代码如下:

func isValid(s string) bool {
	var brakets []byte
	for _, v := range s {
		switch v {
		case '(', '[', '{':
			brakets = append(brakets, byte(v))
		case ')', ']', '}':
			if len(brakets) == 0 {
				return false
			}
			if v == ')' && brakets[len(brakets)-1] == '(' ||
				v == ']' && brakets[len(brakets)-1] == '[' ||
				v == '}' && brakets[len(brakets)-1] == '{' {
				brakets = brakets[:len(brakets)-1]
			} else {
				return false
			}
		default:
			return false
		}
	}
	if len(brakets) > 0 {
		return false
	}
	return true
}

  

posted @ 2020-09-10 13:38  胖胖咩  阅读(347)  评论(0)    收藏  举报