package Ġstr Ċ Ċ import Ġutil . times Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ Ċ ĉ // Ġtest Ġstrings Ċ ĉ val Ġs 1 Ġ= Ġ" abc de " Ċ ĉ val Ġs 2 Ġ= Ġ" cde ab " ĊĊ ĉ println ( is Cycle ( s 1 , Ġs 2 )) ĊĊ ĉ // Ġtest Ġarray Ċ ĉ val Ġs Arr Ġ= ĠarrayOf (" the ", Ġ" brown ", Ġ" fox ", Ġ" ox f ") Ċ ĉ // Ġshould Ġreturn Ġ 3 Ċ ĉ println ( s Arr . cyc lic Words ()) Ċ } Ċ Ċ // ĠCycle ĠDetection Ċ // Ġdetect Ġif Ġ 2 Ġwords Ġare Ġrotation Ġ( re - ordering ) Ġof Ġeach Ġother Ċ fun Ġis Cycle ( s 1 : ĠString , Ġs 2 : ĠString ) Ġ= Ġs 1 . length Ġ== Ġs 2 . length Ġ&& Ġ( s 1 Ġ* Ġ 2 ). contains ( s 2 ) Ċ Ċ /** Ċ Ġ* Ġ@ return Ġnumber Ġof Ġdifferent Ġcy clic Ġwords Ġin Ġthe Ġarray Ċ Ġ*/ Ċ fun ĠArray < String >. cyc lic Words (): ĠInt Ġ{ Ċ ĉ val Ġset Ġ= ĠHashSet < String >() ĊĊ ĉ this . forEach Ġ{ Ġs Ġ-> Ċĉ ĉ if Ġ(! set . any Ġ{ Ġstr . is Cycle ( s , Ġit ) Ġ}) Ġ{ Ċĉĉ ĉ set . add ( s ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ return Ġset . size Ċ } ĊĊ