// ĠThis Ġsolution Ġcauses ĠStack Overflow Error Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ class ĠSolution Ġ{ ĊĠĠĠ Ġfun ĠisValid ( s : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġcancel Br ackets ( s , Ġ 0 ) Ġ== Ġs . length ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠC ANCE LL ATION _ FAIL S Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCancel s Ġbrackets Ġand Ġreturn Ġthe Ġindex Ġof Ġthe Ġfirst Ġcharacter Ġafter Ġwhat 's Ġcancelled . ĊĠĠĠĠ Ġfun Ġcancel Br ackets ( s : ĠString , ĠstartIndex : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= ĠstartIndex ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Index Ġ= Ġcancel Single Bracket Group ( s , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Index Ġ== ĠC ANCE LL ATION _ FAIL S ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġnew Index ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠ Ġ} ĊĊĠĠĠĠ Ġfun Ġcancel Single Bracket Group ( s : ĠString , ĠstartIndex : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Char Ġ= Ġs . getOrElse ( startIndex ) Ġ{ Ġreturn ĠC ANCE LL ATION _ FAIL S Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdo On Open Or Close ( first Char , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner End Index Ġ= Ġcancel Br ackets ( s , ĠstartIndex Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch ( first Char , Ġs . getOrElse ( inner End Index ) Ġ{ Ġreturn ĠC ANCE LL ATION _ FAIL S Ġ}) Ġ-> Ġinner End Index Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠC ANCE LL ATION _ FAIL S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĠC ANCE LL ATION _ FAIL S Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠĠ Ġinline Ġfun Ġ< R > Ġdo On Open Or Close ( char : ĠChar , Ġon Open : Ġ() Ġ-> ĠR , ĠonClose : Ġ() Ġ-> ĠR ): ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' (', Ġ'{ ', Ġ'[' Ġ-> Ġon Open () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' )', Ġ' }', Ġ' ]' Ġ-> ĠonClose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" char =$ char ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠ Ġinline Ġfun Ġmatch ( open Char : ĠChar , Ġclose Char : ĠChar ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( open Char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'(' Ġ-> Ġ')' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'{ ' Ġ-> Ġ' }' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'[' Ġ-> Ġ' ]' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" open Char =$ open Char ") ĊĠĠĠĠĠĠĠ Ġ} Ġ== Ġclose Char Ċ }