括号序列
描述
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
解题
Solution
/**
* 括号序列
* 栈方法
*/
import java.util.Stack;
public class Solution {
public boolean isValid(String s){
if (s.length()==0) return true;
if (s.length()%2 ==0){
char[] str = s.toCharArray();//转为字符数组
Stack<Character> stack= new Stack<Character>();//字符栈
for (int i = 0; i < str.length; i++) {
if (str[i]=='('||str[i]=='['||str[i]=='{') stack.push(str[i]);//压栈
if (str[i]==')'||str[i]==']'||str[i]=='}'){
if (stack.isEmpty()) return false;
char ch = stack.pop();//出栈
if ((ch=='('&&str[i]==')')||(ch=='['&&str[i]==']')||(ch=='{'&&str[i]=='}')) continue;
return false;
}
}
return stack.isEmpty();//全部配对则为真
}
return false;
}
public boolean isValid2(String s){
if (s.length()==0) return true;
char[] ch = s.toCharArray();
Stack<Character> stack= new Stack<Character>();
for (char c:ch){
switch (c){
case '(': stack.push(')'); break;
case '[': stack.push(']'); break;
case '{': stack.push('}'); break;
default:{
if (stack.isEmpty()||stack.pop()!=c) return false;
}
}
}
return stack.isEmpty();
}
}