给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.注意空字符串可被认为是有效字符串
代码:
func isValid(s string) bool {
var stack []string
mapTemp := make(map[string]string)
mapTemp[")"]="("
mapTemp["]"]="["
mapTemp["}"]="{"
for i := 0; i < len(s); i++ {
ca,ok := mapTemp[s[i: i+1]]
if ok {
if len(stack) == 0 || ca != stack[len(stack)-1]{
return false
}
stack = stack[:len(stack)-1]
}else {
stack = append(stack, s[i: i+1])
}
}
if len(stack) > 0 {
return false
}
return true
}
思路:
1.利用栈先进后出的特点,遇到左括号入栈,遇到右括号时将对应的左括号出栈,看遍历完所有的字符后栈是否为空;
2.建立map 构建左右括号的对应关系:key为右括号,value为左括号,这样查询 2个括号是否对应只需 O(1) 时间复杂度;
3.利用go切片实现栈的逻辑。