给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
func isValid(s string) bool {
if len(s)%2 == 1{//扣号数一定是偶数
return false
}
stack := []byte{}//建立栈
pairs := map[byte]byte{//建立哈希表(映射)
')':'(',
'}':'{',
']':'[',
}
for i:=0;i<len(s);i++{//遍历字符串
if pairs[s[i]]>0{//大于零表示该字符是右括号.需要判断进行匹配
//判断len(stack)是否为零是因为左括号被压入栈中,而此时匹配的是右括号,
//若栈为空,则无法进行括号匹配
if len(stack) == 0 || stack[len(stack)-1] !=pairs[s[i]]{
return false
}
//若可以匹配,则左括号出栈
stack = stack[0:len(stack)-1]
}else{//此时表示当前字符为左扣号,需要压入栈中
stack = append(stack,s[i])
}
}
return len(stack) == 0
}
```[[20. 有效的括号](/problems/valid-parentheses/)]()]()