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
}
浙公网安备 33010602011771号