描述
给定一个字符串所表示的括号序列,包含以下字符: ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, 判定是否是有效的括号序列。
样例
括号必须依照 “()” 顺序表示, “()[]{}” 是有效的括号,但 “([)]”则是无效的括号。
挑战
O(n)的时间,n为括号的个数
public static boolean isValidParentheses(String s) {
//如果s为空或者长度为0或者长度为奇数,括号肯定不匹配
if(s==null||s.length()==0||s.length()%2!=0){
return false;
}
//定义一个装载char类型数据的栈,栈也是属于集合,装载对象,而不能直接装载基本数据类型
Stack<Character> stack=new Stack<Character>();
//java.lang.Integer int
//java.lang.Character char
//java.lang.Double double
//java.lang.Float float
//java.lang.Boolean boolean
//标志,也是最终返回的结果
boolean flag=true;
//从s的第一个字符开始遍历
for(int i=0;i<s.length();i++){
//如果遇到"(""[""{",则压入栈中
if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{'){
stack.push(s.charAt(i));
}else if(s.charAt(i)==')'){
//判断stack栈是否为空,且栈顶元素与s的相应字符匹配,
//如果匹配,则栈顶元素出栈;否则,整个字符串都字符串不匹配,跳出循环;
if(!stack.empty()&&stack.peek()=='('){
stack.pop();
}else{
flag=false;
break;
}
}else if(s.charAt(i)==']'){
//判断stack栈是否为空,且栈顶元素与s的相应字符匹配
if(!stack.empty()&&stack.peek()=='['){
stack.pop();
}else{
flag=false;
break;
}
}else if(s.charAt(i)=='}'){
//判断stack栈是否为空,且栈顶元素与s的相应字符匹配
if(!stack.empty()&&stack.peek()=='{'){
stack.pop();
}else{
flag=false;
break;
}
}
}
//遍历一遍字符串后,看栈是否为空,如果不为空,则该字符串不匹配;
if(!stack.empty()){
flag=false;
}
return flag;
}