20 有效的括号
题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
解题思路
stack数据结构,压栈及出栈
算法如下:时间复杂度O(n) 空间复杂度O(1)
// date 2020/01/06
/* 算法:
0. 如果字符串长度为单数,直接返回false.
1. 遇到左括号,入栈
2. 遇到右括号,判断栈是否为空,如果为空,返回false
3. 如果不为空,出栈
4. 遍历结束后,判断栈是否为空。
*/
func isValid(s string) bool {
if len(s) & 0x1 == 1 {return false}
stack := make([]rune, 0)
var c rune
for _, v := range s {
if v == '(' || v == '{' || v == '[' {
stack = append(stack, v)
} else {
if len(stack) == 0 {return false}
c = stack[len(stack)-1]
if v == ')' && c == '(' || v == '}' && c == '{' || v == ']' && c == '[' {
stack = stack[:len(stack)-1]
} else {
return false
}
}
}
return len(stack) == 0
}
最后更新于