/** Ċ Ġ* ĠReleased Ġunder Ġthe Ġterms Ġof Ġthe ĠApache ĠLicense Ġ 2 . 0 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġobject tro uve . org Ġ< un . object . tro uve @ gmail . com >. Ċ Ġ*/ Ċ package Ġorg . object tro uve . next text Ċ Ċ import Ġjava . lang . Integer . max Ċ import Ġjava . util .* Ċ Ċ internal Ġclass ĠCri Counter ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmin Code Point : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmax Code Point : ĠInt Ġ= Ġ 1 2 7 Ċ ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( min Code Point Ġ< Ġ 0 Ġ|| Ġmax Code Point Ġ< Ġmin Code Point ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Invalid Ġcode Ġpoint . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġ' min Code Point ' Ġmust Ġbe Ġ>= Ġ 0 , Ġwas Ġ$ min Code Point ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġ' max Code Point ' Ġmust Ġbe Ġ>= Ġ' min Code Point ', Ġwas Ġ$ max Code Point .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcri Counts ( text : ĠString ): ĠCri Counts Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnr Of Symbols Ġ= Ġmax Code Point Ġ- Ġmin Code Point + 1 ĊĠĠĠĠĠĠĠ Ġval Ġlast Positions Ġ= ĠInt Array ( nr Of Symbols ) ĊĠĠĠĠĠĠĠ Ġval Ġinterval sBy Symbol Ġ= ĠArray ( nr Of Symbols ) Ġ{ ĠLinkedList < Int >() } ĊĠĠĠĠĠĠĠ Ġvar Ġmax Interval Length Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtext . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Point Ġ= ĠCharacter . code Point At ( text , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġix Ġ= Ġix ( code Point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ix Ġ>= Ġ 0 Ġ&& Ġix Ġ< Ġinterval sBy Symbol . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Length Ġ= Ġi Ġ- Ġlast Positions [ ix ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Positions [ ix ] Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterval sBy Symbol [ ix ]. add ( interval Length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Interval Length Ġ= Ġmax ( max Interval Length , Ġinterval Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinterval Count sBy Symbol Ġ= ĠArray ( nr Of Symbols ) Ġ{ ĠInt Array ( max Interval Length + 1 )} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġinterval sBy Symbol . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġinterval sBy Symbol [ i ]. indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Length Ġ= Ġinterval sBy Symbol [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Count sBy Symbol [ i ][ interval Length ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĠCri Counts ( min Code Point , Ġmax Code Point , Ġmax Interval Length , Ġtext . length , Ġinterval Count sBy Symbol ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġix ( i : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġi Ġ- Ġmin Code Point ĊĠĠĠ Ġ} Ċ }