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; }
注:关于栈的使用可以参考一下链接:
点击打开链接
相关文章推荐
- 去掉 phpwind 8.7 敏感词提示
- iPhone SDK 包含哪些东西?
- 听阿里技术大神讲解今年双11背后的关键技术
- CSS样式
- Alamofire - 优雅的处理 Swift 中的网络操作
- 怀黄庭坚
- Web系统大规模并发:电商秒杀与抢购
- python一个字符串的值是否包含在另一个字符串中
- softmax回归
- iOS 开发者账号申请(最新)
- Unix/Linux脚本中"set -e"的作用
- matlab函数
- Android Ndk 编译
- 团队作业Week14
- Python中的for循环,codecademy
- 将windows程序 注册成为系统服务自动启动
- 导航栏的设置
- leetcode -- Longest Increasing Subsequence -- DP 重点常考
- IOS那些事------callBack回传的方法
- Swift之协议( protocol)