题目:
判断括号组合是否有效
思路:
用stack,简单题
package Level2;
import java.util.Stack;
/**
*
* Valid Parentheses
*
* Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
*
*/
public class S20 {
public static void main(String[] args) {
}
// 用stack来检查
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
// 如果遇到前括号就压入栈
if(c=='(' || c=='[' || c=='{'){
stack.push(c);
}else if(c==')' || c==']' || c=='}'){ // 遇到后括号就出栈
if(stack.size() == 0){ // 说明后括号太多了
return false;
}
char cpop = stack.pop();
if(cpop=='(' && c==')'){
continue;
}else if(cpop=='[' && c==']'){
continue;
}else if(cpop=='{' && c=='}'){
continue;
}
return false;
}
}
return stack.size()==0;
}
}
public class Solution {
public boolean isValid(String s) {
Stack stack = new Stack();
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(c=='(' || c=='[' || c=='{') {
stack.push(c);
}
else if(c == ')' && !stack.isEmpty() && stack.peek() == '(') {
stack.pop();
} else if(c == ']' && !stack.isEmpty() && stack.peek() == '[') {
stack.pop();
} else if(c == '}' && !stack.isEmpty() && stack.peek() == '{') {
stack.pop();
} else {
return false;
}
}
return stack.isEmpty();
}
}