题目:
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.
就是说要判断内容为”{“,”}”,”[“,”]”,”(“,”)”的字符串,是否一一对应,有开始有结束。
代码
1.个人思路
/**我优化几遍后的代码
* 最短用时:8ms
* beats:93.67%
*/
public boolean isValid1(String s) {
if(s.length()%2!=0||s.length()==0){return false;}
Stack<Character> stack = new Stack<Character>();
for(char c:s.toCharArray()){
if(c=='('||c=='{'||c=='['){stack.push(c);}
else if(stack.isEmpty()){return false;}
else if(c==']'){if(stack.peek()!='['){return false;}stack.pop();}
else if(c==')'){if(stack.peek()!='('){return false;}stack.pop();}
else if(c=='}'){if(stack.peek()!='{'){return false;}stack.pop();}
}
return stack.isEmpty();
}
2.网上大神思路
/**
* 网上大神思路
* 用时:10ms
* beats:65.31%
*/
public boolean isValid2(String s){
Stack<Character> stack = new Stack<Character>();
for(char c:s.toCharArray()){
if(c=='('){stack.push(')');}
else if(c=='{'){stack.push('}');}
else if(c=='['){stack.push(']');}
else if(stack.isEmpty()||stack.pop()!=c){return false;}
}
return stack.isEmpty();
}