简便做法:
在做题的时候我发现了一种消消乐做法,这个方法特别方便,但是时间复杂度很高。在这里把它写出来
class Solution {
public boolean isValid(String s) {
while(true){
int l=s.length();
s=s.replace("()","");
s=s.replace("{}","");
s=s.replace("[]","");
if(s.length()==l){
return l==0;
}
}
}
}
题意说:一定要按正确的顺序闭合,就说明了这种方式是可以使用的。因为不管怎么写,总有一种类型的括号是左右括号相邻的。
正规做法:采用栈的形式,
class Solution {
public boolean isValid(String s) {
//判断是否奇数个,若是则直接false
if(s.length()%2!=0){
return false;
}else {
//建立栈
Stack<Character> stack = new Stack<>();
//循环遍历s
for(char c:s.toCharArray()){
if(c=='(')
stack.push(')');
else if(c=='[')
stack.push(']');
else if(c=='{')
stack.push('}');
//这里判断栈为空主要为了防止右括号比左括号先出现。
//判断c!=stack.pop()是为了检验左右括号出现的位置
else if(stack.empty()||c!=stack.pop())
return false;
}
//最后判断栈是否为空
return stack.empty();
}
}
}
栈的原理就是,先入的后出,最近入的最近出。可以完美的应用的此题中