码迷,mamicode.com
首页 > 其他好文 > 详细

20.有效括号(Valid Parentheses)

时间:2017-10-11 16:27:21      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:ack   class   array   输入   tac   思路   否则   ++   相等   

题目:

由于只包含字符的字符串‘(‘‘)‘‘{‘‘}‘‘[‘‘]‘,确定输入字符串是有效的。

括号必须关闭以正确的顺序,"()"并且"()[]{}"都是有效的,但"(]""([)]"没有。

 

方法一:

思路:(1)首先将每对括号以键值对的形式添加到HashMap中,其中左半边括号为key,右半边括号为value;

(2)从给定的字符串s的第一个元素下标开始(即i=0开始),直到s的最后一个元素的下标结束(即i=s.length()-1结束),若第i个元素为左半个括号,则将其压入栈中;

         若第i个元素为右半个括号,若栈为空或者弹出的栈顶元素所应的value值不等于第i个元素,则返回false;否则i++;

(3)循环执行结束,若栈为空则返回true,否则返回false

 

代码:

 1 class Solution {
 2     public boolean isValid(String s) {
 3 
 4         HashMap<Character,Character> hm=new HashMap<Character,Character>();//创建Map用于存放括号
 5         hm.put(‘(‘,‘)‘);
 6         hm.put(‘{‘,‘}‘);
 7         hm.put(‘[‘,‘]‘);
 8         
 9         Stack<Character> S=new Stack<Character>();//创建一个空栈
10         
11         //从字符串s的首元素即i=0开始,若s的第i个元素为左半个括号则将其压栈;否则将s的第i个元素与栈顶元素相比较,若不相等则不匹配,否则i++;
12         for(int i=0;i<s.length();i++){
13             
14             if(hm.containsKey(s.charAt(i))){
15                 
16                 S.push(s.charAt(i));
17                 
18             }else if(S.empty()||hm.get(S.pop())!=s.charAt(i)){
19                 
20                 return false;
21             
22             }
23         }
24         
25         return S.empty();
26         
27     }
28 }

 

方法二:

代码:

 1 class Solution {
 2     public boolean isValid(String s) {
 3 
 4         Stack<Character> S=new Stack<Character>();
 5         
 6         for(char c:s.toCharArray()){
 7             
 8             if(c==‘(‘){
 9                 
10                 S.push(‘)‘);
11                 
12             }else if(c==‘{‘){
13                 
14                 S.push(‘}‘);
15                 
16             }else if(c==‘[‘){
17             
18                 S.push(‘]‘);
19             
20             }else if(S.empty()||S.pop()!=c){
21             
22                 return false;
23             
24             }
25             
26         }
27         
28         return S.empty();
29         
30     }
31 }

 

20.有效括号(Valid Parentheses)

标签:ack   class   array   输入   tac   思路   否则   ++   相等   

原文地址:http://www.cnblogs.com/xuzhiyuan/p/7650990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!