20.有效括号(Valid Parentheses)

与世无争的帅哥 提交于 2020-01-18 23:10:39

题目:

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

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

 

方法一:

思路:(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 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!