package Ġkat as . kotlin . leetcode . partition _ labels Ċ Ċ import Ġdat sok .* Ċ import Ġorg . junit .* Ċ Ċ /** Ċ Ġ* Ġhttps :// leetcode . com / problems / partition - labels / Ċ Ġ* Ċ Ġ* ĠA Ġstring ĠS Ġof Ġlowercase Ġletters Ġis Ġgiven . ĠWe Ġwant Ġto Ġpartition Ġthis Ġstring Ġinto Ġas Ġmany Ġparts Ġas Ġpossible Ċ Ġ* Ġso Ġthat Ġeach Ġletter Ġappears Ġin Ġat Ġmost Ġone Ġpart , Ġand Ġreturn Ġa Ġlist Ġof Ġintegers Ġrepresenting Ġthe Ġsize Ġof Ġthese Ġparts . Ċ Ġ*/ Ċ class ĠPartition Labels Tests Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġexamples () Ġ{ ĊĠĠĠĠĠĠĠ Ġpartition Labels (" abab cb aca def eg de hi j hk lij ") Ġshould Equal ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" abab cb aca ", Ġ" def eg de ", Ġ" hi j hk lij " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġpartition Labels ( s : ĠString ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġcounts Ġ= ĠInt Array ( s . length ) ĊĠĠĠ Ġval Ġchars Ġ= ĠHashSet < Char >() ĊĠĠĠ Ġs . indices . forEach Ġ{ Ġi Ġ-> Ġif Ġ( chars . add ( s [ i ])) Ġcounts [ i ] Ġ+= Ġ 1 Ġ} ĊĠĠĠ Ġchars . clear () ĊĠĠĠ Ġs . indices . reversed (). forEach Ġ{ Ġi Ġ-> Ġif Ġ( chars . add ( s [ i ])) Ġcounts [ i ] Ġ-= Ġ 1 Ġ} ĊĊĠĠĠ Ġval Ġindices Ġ= ĠArrayList < Int >() ĊĠĠĠ Ġcounts . fold Indexed ( 0 ) Ġ{ Ġindex , Ġsum , Ġcount Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( sum Ġ== Ġ 0 ) Ġindices . add ( index ) ĊĠĠĠĠĠĠĠ Ġsum Ġ+ Ġcount ĊĠĠĠ Ġ} ĊĠĠĠ Ġindices . add ( s . length ) ĊĠĠĠ Ġreturn Ġindices . window ed ( size Ġ= Ġ 2 ). map Ġ{ Ġ( from , Ġto ) Ġ-> Ġs . substring ( from , Ġto ) Ġ} Ċ }