您的位置:首页 > 其它

LintCode_有效的括号序列

2015-12-14 18:03 387 查看
问题描述:



算法设计:

此题的关键点在于栈的使用;栈是先入后出的特点,像叠积木一样,往栈中添加元素时,从下往上一层层添加;而将栈中的元素删除时,则从顶往下删除,每次最先删除的肯定栈顶元素;

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;

}


注:关于栈的使用可以参考一下链接:

点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: