Valid Parentheses有效括号匹配。利用栈。
问题描述:给定一个字符串,其中只包含字符‘{’, '}', '[', ']', '(', ')'确定如果输入字符串是有效的。
括号必须以正确的顺序排列,“()”和“()[]{ }”都是有效的, "{", " {]"等都是无效的。
解题思路:利用栈,如果不是右括号就压入栈中,如果是右括号,就看前一个字符是不是匹配的左括号,如果匹配出栈,接着看后面字符,不匹配则返回false。
1 public boolean isValid(String s) { 2 Map<Character,Character> map = new HashMap<>(); 3 map.put('(',')'); 4 map.put('[',']'); 5 map.put('{','}'); 6 Stack<Character> stack = new Stack<>(); 7 for(int i = 0; i < s.length(); i ++) 8 { 9 char curr = s.charAt(i); 10 if(map.keySet().contains(curr)) 11 { 12 stack.push(curr); 13 } 14 //注意判断空的情况 15 else if(!stack.empty() && map.values().contains(curr)) 16 { 17 char pre = stack.peek(); 18 if(map.get(pre)==curr) 19 { 20 stack.pop(); 21 } 22 else 23 { 24 return false; 25 } 26 } 27 else 28 { 29 return false; 30 } 31 } 32 return stack.empty(); 33 }