1. 程式人生 > >20.有效括號(Valid Parentheses)

20.有效括號(Valid Parentheses)

比較 添加 nta 都是 char value ole 壓入 有效

題目:

由於只包含字符的字符串‘(‘‘)‘‘{‘‘}‘‘[‘‘]‘,確定輸入字符串是有效的。

括號必須關閉以正確的順序,"()"並且"()[]{}"都是有效的,但"(]""([)]"沒有。

方法一:

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