leetcode刷题记录
题目 有效的括号
题目描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
准备一个栈
遇到左小, 中, 大括号压栈, 否则弹出
例子
整个字符串遍历完成的时候, 栈里必须是空的, 否则就不对了
代码
小优化, 用数组做栈
代码
public static boolean isValid(String s) {
if (s == null || s.length() == 0) {
return true;
}
char[] str = s.toCharArray();
int N = str.length;
char[] stack = new char[N];
int size = 0;
for (int i = 0; i < N; i++) {
char cha = str[i];
if (cha == '(' || cha == '[' || cha == '{') {
stack[size++] = cha == '(' ? ')' : (cha == '[' ? ']' : '}');
} else {
if (size == 0) {
return false;
}
char last = stack[--size];
if (cha != last) {
return false;
}
}
}
return size == 0;
}
go版本
func isValid(s string) bool {
if s == "" || len(s) == 0 {
return true
}
N := len(s)
stack := make([]string, N)
size := 0
for i := 0; i< N ;i++ {
cha := s[i:i+1]
fmt.Println(cha)
if cha == "(" || cha == "[" || cha == "{" {
if cha == "(" {
stack[size] = ")"
size++
}else if cha == "["{
stack[size] = "]"
size++
}else {
stack[size] = "}"
size++
}
}else {
if size == 0{
return false
}
size--
last := stack[size]
if cha != last {
return false
}
}
}
return size == 0
}