用stack依次装入left, 遇到right就查看和之前存的left是不是match,match就pop(), 不match直接return false。可以用case 也可以用if来选择right。
public boolean isValid(String s) {
if(s == null || s.length() == 1) return false;
Stack<Character> st = new Stack<Character>();
int len = s.length();
int i = 0;
while(i<len) {
if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') st.push(s.charAt(i++));
else if(s.charAt(i) == ')') {
if (st.empty()) return false;
if (st.peek() == '(') {st.pop();i++;}
else return false;
}
else if(s.charAt(i) == ']') {
if (st.empty()) return false;
if (st.peek() == '[') {st.pop();i++;}
else return false;
}
else if(s.charAt(i) == '}') {
if (st.empty()) return false;
if (st.peek() == '{') {st.pop();i++;}
else return false;
}
}
return st.size() == 0;
}
public boolean isValid(String s) {
if(s == null || s.length() == 1) return false;
Stack<Character> st = new Stack<Character>();
int len = s.length();
int i = 0;
while(i<len) {
if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') st.push(s.charAt(i++));
else if(s.charAt(i) == ')') {
if (st.empty()) return false;
if (st.peek() == '(') {st.pop();i++;}
else return false;
}
else if(s.charAt(i) == ']') {
if (st.empty()) return false;
if (st.peek() == '[') {st.pop();i++;}
else return false;
}
else if(s.charAt(i) == '}') {
if (st.empty()) return false;
if (st.peek() == '{') {st.pop();i++;}
else return false;
}
}
return st.size() == 0;
}