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.
貌似对时间复杂度要求不高。我先用一个字符串保存符号信息(预处理),这个字符串中只有(){}[] 这些元素。然后用到的是一个栈来进行处理。当遇到的是( [ { 之一的时候,压栈;当遇到的是 } ] ) 时,需要先判断当前栈顶的元素是否能够与这个符号相匹配( ( 与 ) 配, [ 与 ] 配, { 与 } 配)。如果能够匹配上,说明是符合条件的,然后pop 弹出栈顶,否则直接return false; 当循环正在进行时,栈就已经为空的话,那说明是不可能正确的,直接return false
代码:
package leetcode;
import java.util.Stack;
public class ValidParen {
public static void main(String[] args) {
ValidParen v = new ValidParen();
System.out.println("isValidat??"+v.isValid("{}[]()111"));
System.out.println("isValidat??"+v.isValid("{[()11]}"));
System.out.println("isValidat??"+v.isValid("{}[(])111"));
System.out.println("isValidat??"+v.isValid("{}[()111"));
System.out.println("isValidat??"+v.isValid("]"));
}
public boolean isValid(String s) {
//Stack temp = new Stack<char[]>();
String temp ="";
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='{'|| s.charAt(i)=='['|| s.charAt(i)=='('|| s.charAt(i)=='}'|| s.charAt(i)==']'|| s.charAt(i)==')'){
temp+=(char)s.charAt(i);
}
}
System.out.println(temp);
//开始处理
Stack stack = new Stack<char[]>();
for(int i=0;i<temp.length();i++){
if(temp.charAt(i)=='(' || temp.charAt(i)=='[' || temp.charAt(i)=='{'){
stack.push((char)temp.charAt(i));
}else{
if(stack.isEmpty()){
return false;
}
if(temp.charAt(i)==')'|| temp.charAt(i)==']'|| temp.charAt(i)=='}'){
if(checkValidat((char)stack.peek(),temp.charAt(i))){
stack.pop();
}else
return false;
}
}
}
if(stack.isEmpty())
return true;
else
return false;
}
public boolean checkValidat(char c1,char c2){
if(c1=='(' && c2 == ')'|| c1=='[' && c2 == ']' || c1=='{' && c2 == '}'){
return true;//可以pop
}else{
return false;
}
}
}