20.有效括号(Valid Parentheses)

Posted xzy不会飞的地板流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20.有效括号(Valid Parentheses)相关的知识,希望对你有一定的参考价值。

题目:

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

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

 

方法一:

思路:(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)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode20_Valid Parentheses有效的括号

20.有效括号(Valid Parentheses)

20. Valid Parentheses检验括号字符串的有效性

149.Valid Parentheses(有效的括号)

[Leetcode] valid parentheses 有效括号对

领扣简单版--有效的括号(Valid Parentheses)