package Ġhard ĊĊ Ċ class Ġ_ 2 1 2 Word Search II Ġ{ ĊĠĠĠ Ġclass ĠSolution Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdirs Ġ= ĠarrayOf ( int ArrayOf ( 1 , Ġ 0 ), Ġint ArrayOf (- 1 , Ġ 0 ), Ġint ArrayOf ( 0 , Ġ 1 ), Ġint ArrayOf ( 0 , Ġ- 1 )) ĊĠĠĠĠĠĠĠ Ġfun Ġfind Words ( board : ĠArray < CharArray >, Ġwords : ĠArray < String >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrie Ġ= ĠT rie () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( word Ġin Ġwords ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrie . insert ( word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġans : ĠMutable Set < String > Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġboard . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġboard [ 0 ]. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdfs ( board , Ġtrie , Ġi , Ġj , Ġans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList ( ans ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdfs ( board : ĠArray < CharArray >, Ġtemp Now : ĠT rie ?, Ġi 1 : ĠInt , Ġj 1 : ĠInt , Ġans : ĠMutable Set < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnow Ġ= Ġtemp Now ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! now !!. children . containsKey ( board [ i 1 ][ j 1 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch Ġ= Ġboard [ i 1 ][ j 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnow Ġ= Ġnow . children [ ch ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ!= Ġnow !!. word ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġans . add ( now . word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboard [ i 1 ][ j 1 ] Ġ= Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( dir Ġin Ġdirs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 2 Ġ= Ġi 1 Ġ+ Ġdir [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj 2 Ġ= Ġj 1 Ġ+ Ġdir [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 2 Ġ>= Ġ 0 Ġ&& Ġi 2 Ġ< Ġboard . size Ġ&& Ġj 2 Ġ>= Ġ 0 Ġ&& Ġj 2 Ġ< Ġboard [ 0 ]. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdfs ( board , Ġnow , Ġi 2 , Ġj 2 , Ġans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboard [ i 1 ][ j 1 ] Ġ= Ġch ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠT rie Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġword Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġchildren : ĠMutable Map < Char , ĠT rie > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġfun Ġinsert ( word : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcur : ĠT rie Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġword ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cur . children . containsKey ( element )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur . children [ element ] Ġ= ĠT rie () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Ġ= Ġcur . children [ element ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur . word Ġ= Ġword ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }