package Ġarrays and strings Ċ Ċ import Ġ_ utils . Use Comment As Documentation Ċ import Ġarrays and strings . Is Per mutation Of String AP al indrome . is Pal indrome Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ private Ġobject ĠIs Per mutation Of String AP al indrome Ġ{ ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġstring 's Ġpermutation Ġis Ġa Ġpal indrome ĊĠĠĠĠ Ġ* Ġif ĊĠĠĠĠ Ġ* Ġfor Ġa Ġodd Ġlength Ġstring , Ġthere Ġmust Ġbe Ġonly Ġone Ġodd Ġ# Ġof Ġcharacter Ġ( the Ġmiddle Ġone ) ĊĠĠĠĠ Ġ* Ġfor Ġa Ġeven Ġlength Ġstring , Ġall Ġchars Ġmust Ġhave Ġeven Ġ# Ġof Ġoccurrence ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Use Comment As Documentation ĊĠĠĠ Ġfun Ġis Pal indrome ( str : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġstr . toLowerCase (). replace (" Ġ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġchar Count Ġ= Ġmutable Map Of < Char , ĠInt >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar Count [ s ] Ġ= Ġ( char Count [ s ] Ġ?: Ġ 0 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( input . length Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar Count . values . all Ġ{ Ġit Ġ% Ġ 2 Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġodd Occurrence Ġ= Ġchar Count . values . filter Ġ{ Ġit Ġ% Ġ 2 Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġodd Occurrence . size Ġ== Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ ĠassertTrue ( is Pal indrome (" T act ĠCo a ")) ĊĠĠĠ ĠassertTrue ( is Pal indrome (" level ")) ĊĠĠĠ ĠassertTrue ( is Pal indrome (" no on ")) ĊĠĠĠ ĠassertFalse ( is Pal indrome (" no on 2 a ")) Ċ }