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.
这个题只要学过数据结构了解栈的人都应该一眼就可以看出来怎么做,而且书中就有这样的例子。如果是左括号则入栈,如果是右括号,则取当前栈顶元素与此右括号比较,如果匹配则栈顶元素出栈,如果不匹配则返回false,最终如果栈为空则返回true.
package leetcode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class leet20 {
public static void main(String[] args) {
leet20 lee = new leet20();
String str = "{()()()[]]}";
boolean result = lee.isValid2(str);
System.out.println(result);
}
//第一次代码
public boolean isValid(String s){
List<Character> stack = new ArrayList<Character>();
for(int i = 0;i < s.length();i++){
if(s.charAt(i) == '(' || s.charAt(i) == '{'||s.charAt(i) == '['){
stack.add(s.charAt(i));
}else{
switch (s.charAt(i)){
case ')':
if(stack.get(stack.size()-1) == '('){
stack.remove(stack.size()-1);
}else{
return false;
}
break;
case ']':
if(stack.get(stack.size()-1) == '['){
stack.remove(stack.size()-1);
}else{
return false;
}
break;
case '}':
if(stack.get(stack.size()-1) == '{'){
stack.remove(stack.size()-1);
}else{
return false;
}
break;
}
}
}
if(stack.size() == 0){
return true;
}else
return false;
}
//精简后的代码
public boolean isValid2(String s){
List<Character> stack = new ArrayList<Character>();
for(int i = 0;i < s.length();i++){
if(s.charAt(i) == '(' || s.charAt(i) == '{'||s.charAt(i) == '['){
stack.add(s.charAt(i));
}else{
if((s.charAt(i)==')'&&stack.get(stack.size()-1) == '(')||(s.charAt(i)==']'&&stack.get(stack.size()-1) == '[')
||(s.charAt(i)==')'&&stack.get(stack.size()-1) == '(')){
stack.remove(stack.size()-1);
}else
return false;
}
}
if(stack.size() == 0){
return true;
}else
return false;
}
}