class  Solution  { public  boolean  isValid ( String  s)  { Stack < Character > = new  Stack < Character > ( ) ; int  i= 0 ; if ( s. length ( ) % 2 != 0 ) return  false ; for  ( ; i< s. length ( ) ; i++ ) { if ( s. charAt ( i) == '(' ) { stk. push ( '(' ) ; } else  if ( s. charAt ( i) == '{' ) { stk. push ( '{' ) ; } else  if ( s. charAt ( i) == '[' ) { stk. push ( '[' ) ; } else { if ( s. charAt ( i) == ')' ) { if ( ! stk. isEmpty ( ) && stk. peek ( ) == '(' ) stk. pop ( ) ; else return  false ; } else  if  ( s. charAt ( i) == '}' ) { if ( ! stk. isEmpty ( ) && stk. peek ( ) == '{' ) stk. pop ( ) ; else return  false ; } else  if  ( s. charAt ( i) == ']' ) { if ( ! stk. isEmpty ( ) && stk. peek ( ) == '[' ) stk. pop ( ) ; else return  false ; } else { return  false ; } } } return  stk. isEmpty ( ) ; } 
} 
class  Solution  { public  boolean  isValid ( String  s)  { LinkedList < Character > = new  LinkedList < > ( ) ; list. add ( '?' ) ; if ( s. length ( ) % 2 != 0 ) return  false ; HashMap < Character , Character > = new  HashMap < > ( ) ; map. put ( '(' , ')' ) ; map. put ( '[' , ']' ) ; map. put ( '{' , '}' ) ; map. put ( '?' , '?' ) ; int  i= 0 ; for  ( ; i< s. length ( ) ; i++ ) { if ( map. containsKey ( s. charAt ( i) ) ) { list. add ( s. charAt ( i) ) ; } else  if ( map. get ( list. pollLast ( ) ) != s. charAt ( i) ) { return  false ; } } return  list. size ( ) == 1 ; } 
}