描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
数据范围:字符串长度 0\le n \le 100000≤n≤10000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
我的解法:
在递归字符串的过程中,采用stack保存当前字符,每一次递归将字符与集合最后一个元素进行匹配,如果匹配成功,则清除最后一个元素或添加当前元素,进入下一次递归,最后保证集合为空,说明字符串合法
Stack<String>stack = new Stack<>();
public boolean isValid (String s) {
int index = 0;
return a(index, s);
}
public boolean a(int index, String s) {
if(index==s.length()){//最后判断
return stack.size()>0?false:true;
}
String value = s.charAt(index) + "";
if (stack.size() <= 0) {
if (value.equals("(") || value.equals("{") || value.equals("[")) {
stack.push(value);
}else
return false;
} else {
if (value.equals("(") || value.equals("{") || value.equals("[")) {
stack.push(value);
} else {
if (value.equals(")")) {
if (stack.peek().equals("(")) {
stack.pop();
} else {
return false;
}
} else if (value.equals("]")) {
if (stack.peek().equals("[")) {
stack.pop();
} else {
return false;
}
} else {
if (stack.peek().equals("{")) {
stack.pop();
} else {
return false;
}
}
}
}
return a(index+1,s);
}