Problem Statement
We say that a letter in a string has a twin if it has the same letter immediately to its left or immediately to its right (or both).
For example, in the string "AARDVARK" each of the first two 'A' has a twin (but the third 'A' does not) and in the string "FLUSSSAND" each of the three 'S' has a twin.
Elly has a
The girl can alter her string as many times as she likes. In each operation she chooses one valid index i and either increments or decrements the letter S[i].
Incrementing a letter changes it to the next letter in the alphabet (e.g., 'A' to 'B', 'L' to 'M', and 'Y' to 'Z'). Decrementing a letter changes it to the previous letter in the alphabet (e.g., 'B' to 'A', 'M' to 'L', and 'Z' to 'Y'). The letter 'A' cannot be decremented and the letter 'Z' cannot be incremented.
Multiple operations may be applied to the same index. Thus, S can be transformed into any other string of the same length.
Elly wants to alter her S into a string in which each letter has a twin. Please find and return the minimal number of operations needed.
Definition
- Class:
- EllysTwinLetters
- Method:
- getMin
- Parameters:
- String
- Returns:
- int
- Method signature:
- int getMin(String S)
- (be sure your method is public)
Constraints
- S will contain between 2 and 100 characters, inclusive.
- Each character of S will be an uppercase letter of the English alphabet ({'A'-'Z'}).
Examples
"TOPCODER"
Returns: 30
Some of the strings we can produce from the string "TOPCODER" are: "TTPPOOEE" in 0 + 5 + 0 + 13 + 0 + 11 + 0 + 13 = 42 operations; "PPPEEEEE" in 4 + 1 + 0 + 2 + 10 + 1 + 0 + 13 = 31 operations; "OOOOOOOO" in 5 + 0 + 1 + 12 + 0 + 11 + 10 + 3 = 42 operations; "SSEEEKKK" in 1 + 4 + 11 + 2 + 10 + 7 + 6 + 7 = 48 operations; "PPPDDDLL" in 4 + 1 + 0 + 1 + 11 + 0 + 7 + 6 = 30 operations; "GGLLHHFF" in 13 + 8 + 4 + 9 + 7 + 4 + 1 + 12 = 58 operations. Out of the options above, the transformation into "PPPDDDLL" is the one with the fewest operations: 30. As it turns out, this answer is optimal: there is no solution with fewer operations for the string "TOPCODER". (There are other optimal solutions that also require exactly 30 operations but produce a different string.)
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Returns: 13
Each letter on an even position (counting from zero) can be incremented, achieving "BBDDFFHHJJLLNNPPRRTTVVXXZZ". We have incremented once 13 letters, thus the number of operations we have used is 13. This is the minimal number of operations for this test.
"ESPRIT"
Returns: 25
"WITHOUTITIMJUSTESPR"
Returns: 54
"NOZAPHODJUSTVERYVERYIMPROBABLE"
Returns: 93
"FROMALLTHETHINGSIVELOSTMYMINDIMISSTHEMOST"
Returns: 111
"ABRACADABRA"
Returns: 38
"FAILEDSYSTEMTEST"
Returns: 40
"HEYTHEREWHOEVERISREADINGTHETEXTINTHETESTS"
Returns: 134
"ONADARKDESERTHIGHWAYCOOLWINDINMYHAIR"
Returns: 115
"WELCOMETOTHEHOTELCALIFORNIASUCHALOVELYPLACE"
Returns: 120
"WEREJUSTTWOLOSTSOULSSWIMMINGINAFISHBOWL"
Returns: 93
"NOWIMLAYINGDOWNTOSLEEPPRAYTHELORDMYSOULTOTAKEIFIDI"
Returns: 142
"HUSHLITTLEBABYDONTSAYAWORDANDNEVERMINDTHENOISEYOUH"
Returns: 176
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Returns: 0
"ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
Returns: 0
"AZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZ"
Returns: 850
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
Returns: 12
"AMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAMAM"
Returns: 408
"ANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANANAN"
Returns: 442
"AMANAMANAMANAMANAMANAMANAMANAMANAMANAMANAMANAMANAMAMANAMANAMANAMANAMANAMANAMANAMANAMANAMANAMANAMANAM"
Returns: 432
"AOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAOAO"
Returns: 476
"ABCGHIMNOSTUYZA"
Returns: 33
"ABCEFGIJKMNOQRSUVWYZA"
Returns: 37
"AA"
Returns: 0
"AZ"
Returns: 25
"XY"
Returns: 1
"IM"
Returns: 4
"OK"
Returns: 4
"OOK"
Returns: 4
"AXA"
Returns: 23
"ABZ"
Returns: 25
"BQESLACSHECSYNWBBHQZOZVVRVZFXOKFVFYNUKOISPTBVVCNFSXYRMPRGMWCIGQEJVYFHBHQVORLHGZQTSLGCZQTNVTLTNT"
Returns: 285
"VJOEZPTVPLPBIZWXPARCJDMFELKQJJSXVLYQOCOCEAMHIDZFWGIKNIQIOUJMRUNQGFTBGTWGLLKYXXDE"
Returns: 208
"UKAAFWWCROEZEMOACBBXIMGRGMPIDJHCESSQYSDIPWWWLHJVWHOGLBZJVFVDSTDERMAPQSYKDOPYGCUVDMOVSUG"
Returns: 245
"TBQOFRXFEJIJCPJDBKXQIGSVWCEPTTTUSVKOCTLMFVBDXUDUCHCEOPDYJNDNYONZWGDQXHMKXZWZSRWIELFM"
Returns: 224
"YAJLQZXICTMUBCOTLCMPRXFQNBORKJRDCQHSUCKMWPLELTBXAJLKMHFTFVDGNRKEOCJRNBZNGPUULQDGLITRJ"
Returns: 272
"RUQODSDBUMDCHDJVFSWFJEIPWLYHGBUAHATIPEZCVMPNPATCBMPWWLQYJKCIJMNKEQVACJUNVIZUXFENZRFBK"
Returns: 260
"AHOUPJLQBAQARPQSHOJYPCFWTFOMDYHWZTNVJTYQQPDVFGYJUETAZIVJTVOFXVWJQDCMRADJZQGLZALFXWCOZPBCXDL"
Returns: 314
"YKZOYZROVWZYJUCQNYYNPUMVDNHVEZIIOTMCDIYREQAZHXAGDAATBUGWPPBVYBXTBDWSHEPTKGJLZWTRVGRNCTHMVAM"
Returns: 302
"ZFZEFUHFLEZFNPAVSCWYCIREKIHTOFGIHONNSUVGWKTBMDZBJLEWYFZSHKASLVSWAKHJUKLTUWMRDNKGFLMR"
Returns: 283
"IROAIASCAHSONDHGBISSMLHSKYZYCHLWRHAFAJGEOVOLIENESLCWGKJPAPUDIMUAWUVYRUVPPWCDITYHHWHADJAEYDCXFGI"
Returns: 287
"PCWOUEVNHTQEIPRUULXOOVYCMFVVHHLNEMCQWOYFVIEBAITCZSDZRMTKWSQXZWMZWXYWTIJMASJGQIWDXWJQCGNNXNZTRTJYXFD"
Returns: 289
"VVFFRZXOQRZMPKAKKSFIXVWANUGXXEXYGWFPRPTEWUOXWLUPPKIQKBEKLUOYQGDUAWGYZCJJUUQYJEGK"
Returns: 233
"SWZNIYUZGPKSSKTDQYZTJDKDGHNBVDEKZTWDPKHTEMKHKOSGEWLTYAGRBLJJRPVBAOOQVHKXGFMFZOXQG"
Returns: 231
"EHRLYNQPXLSPNMHWHCOBQWQYQSNCGJDXRNTVAYFKWIRJCPWIGEXFDULUVOQIFLJRCHHGMWVMOGRGVXMOFKCHHEPEOUVKQQHD"
Returns: 268
"BLQHJDMBDKPAMQAKLUCVMPDXWWMPAIYHXKKIKDTBLSGMDIDBEAALMFSNDUZXOJKTSMVXLJTWHCEXMQUABALNQNVZWTJHIDCWM"
Returns: 251
"CIDGXJYNLZHCZERBUZZJSJMRESXPCCFKFFVXKXKFEXIQZVFXIBGQHESMARFZHUCPPNSXZZYKOSCYEMVDWCFECMRZLFF"
Returns: 326
"RCQBLCEWJPLTFGXCICFZDWEQUWKNJZDGWPKDLRYZLLMWZMECAUKAEWCBRUFHYGGBXKGSNVXBUCWIFNCITIXAUMCUCEZNPJJ"
Returns: 360
"UVCZZWMQPIDRXWYJUWSHJOLOWYUVBZOQGZSRZFXHDSYLTCPXEVXFEMYNLUXBZVTETOXMBCBGNGPUMDNOVWU"
Returns: 264
"XMSVZRZMAOUDYIJSWAAEITBEURMWENEVQLXYTINEIRWKZAMHRQQXZSNSIEYCVVVXQAIIZYARBPRIUBQSEJSVCUIFSBF"
Returns: 291
"CWAIJFNQLIBWKJJVJKVBTUGPMBKQCGTHBKJPXMKQNFDAOJUMAGXWUMUBJGCKEESBIPDENJJPBFQFFXUHGFCC"
Returns: 247
"DWFIMOQERAWZMDFVSYWNQRWDUUCRXUMXBVGFGDAVZFZJMNNBELOLDGBSKRGXLSYMEFXQZFNXCCVEGOTDBUNNMT"
Returns: 272
"SMSHDDICRBKCYMFKJJPMCUELCQDCVRXFDBDDUWMKNAXCYOFCNDEKQNUFHKYLBRMJMDHGJOSDMQLGUINAFVSMYR"
Returns: 255
"KUAQBJISWCNKZHQBHLDIOHAMYKGHSCYITNDVARYGWYKJRRVIFSVQEVQURWJTVYSAXUXHKFAWGUELFTKIEBWHLKWFUXUWX"
Returns: 324
"DSHXADAMYVXQWHMMJYHWLQKHULKZPVJAMHPLSQMKPVLOKGVRIZCQZSTKPPFKCVBWSEFWONOGERNRNTDBMURYIXGGQMEZPDWPUQ"
Returns: 305
"AJTQXKNLQPGHYQHBCZRUAPYGERRANAHKSDEDJMWZSGSQWHVQOUVEZDJQDIVCDKTASQIBTAFUYXQOHSGOSLHPS"
Returns: 253
"BAGIWTRRYXRISBPZNGFRABOYOFVMVHAEBKHJLPWGWYLTOLBPGSMNEUIMCMNLOYZRAGEUVIAAAJBZMILO"
Returns: 226
"BZDVGKJWJRSLACQOHAPDPFKKBXWPURAPFSPJSLESTFXZJNLKPKVNQPFGTTDOVLJRKGLLAYBWLSUCAPAEPIAHEZPFZ"
Returns: 299
"LGWWIKOGGAQVVNUNJPMCCIXDLVWSARUKFHSOWMIWXPDKBQIZCURJREZFOZNZCIAWZAURBDGKGZTKFHHEZPOSDRSIVFJZEBXAB"
Returns: 325
"BPAYBJFAVQAXQHTJTHGIXZEYUGDFGTQZQBQULANNEVDPDPKXVPDFKPCEYGNKMTHDCPVIBDBXIZZQXUDOYYAXOPKKQDGTVVZZNZ"
Returns: 335
"BWMEAMZLZRFFRESCOPXZYXFZSJCGOKHMMFTKXSCWCRYBFVFMZUTVIKAFVMOUODYCWWDSFAENWHPSVLHXLVRLUWDGRL"
Returns: 300
"PVVXEHNBQPUWLPMDIANVEUKEXRRPHMBFDPDEMGDWOTNZOKBNOODHOPEGYENTOQSOERRVVCWAQENKZRFVGBHNIWYVXKBSEXV"
Returns: 281
"TSKECOZWYKDPNXSQDJOMJZDPQACPTCAMWFEQOYMKKXTZVWFDKATDQXGKYANSYBMHJZEVTQJLJDXOTHOYQTANLMWFOLIQKTMLLPDA"
Returns: 294
"BSLQPQFIPVEGKQTPQZGMDJNDJDDMGGIMPIEIIWOYRHEVRLZQNXPESUSWEOPPDISEUOJFKGOOBMUIIDKUTRTKIHLFVRPAEYDBHP"
Returns: 261
"ZOSTSRUHBGEDJIIZEXPFNAYYCIQADQIVAILGUUDKULGZVIDTQRHUYWBEFDRFTZRIIJFAJMAKNNMYQQQBAPIVZVFBLEXEBD"
Returns: 246
"FYYWQDZYVTIFGKTXZCOZXBPOZQUFHJINFKVMNCDLQWNQQYINJAIIIDBOMQXOXOJIPMYKXQBVIMGXIJFKGCMYUZNFGZRPP"
Returns: 258
"QADBRCGTKQRSQHAYBSMXPRANKJIXZDDSBDSTMXTRSJRVEINUFTHZFVVKUCIQSUBRVZSSDLGPVTPQJREAFQNJ"
Returns: 263
"ZLZNSWBAXNNFXAZSUVTBHFMPHCQXSVQSLSOQUAQZTWPJVEZMXEQRZOBNNISDTLKSDXJRRXKJCPPGIOWR"
Returns: 266
"DWRRNTLHWHEGDOLKBCFZDXCJEKKTOWSXBCLPWKLGVRBBBFSETDPMDEZZGMTXFMIEIIIRVOXVALWQFYSSAUOAYNVDCQ"
Returns: 268
"RVOJXGJEEAXRATNDVWDOWNCRPSCWEBTVOMYFEZCTFGCFROUHOZJUEUIGHXEGCHEEFJSQIJGMENXEKVHNH"
Returns: 275
"XXRVSAUHITFGBGMWHOFKIIDLNEYRZPHPTQXEERFCPRAAEBKREMELNOSURQFEQUEQGLQPIEHKBLGHXWLKMASXIUX"
Returns: 209
"GHFFXLJFAPLRUEJPRKYHSLOEBFXZCCKJARCRRKTNUFLZYWBMFXJRTEXWCLDMEWZGTDBANRZTLWXDWZWBOYHPV"
Returns: 259
"QGZKUVUUZQDPVNZAIRTSHBNUSXJYGZLQGYDWDIAYGPVKLEMYUHQCTEQQFAFQWLAULLJRZSFKICFLORRBRSQXERLEYMZWFIKBBD"
Returns: 331
"JFPLUFXQTECPKRAMMLXOQNRSKDTHXZUXMJWXXSCLTXNHMMRACWDQHEDYVZIVFVDTVBZKEFZMCYJMLJIBHHJGUDVYTQRTMMI"
Returns: 282
"FITAMPQMWYJXSCAJPRXOUWBOBDUGWHTOEDUPLUKEUTRLKXCUQCCGDMFZISOFEXUGBNIVFJTDKGNUGVUTHYPPX"
Returns: 268
"NMOJPMFQXDRTFZJYWIFVLDXFJKBAKJLEUHTALFBEOARBGEWHYEPNNUHTCFCOHJNHBFCENSVWMIREDOWAGU"
Returns: 257
"HGIUCFKVWNGWFCAIXGKJRZSCGXAGXPVHPAFYWXFPYRHBLDMGEHLREDNDURIVICOJDKKNZMTPJRUNDSWFZDBSWQLLJDGIVSFXOP"
Returns: 300
"URPIZIRQGQZKUWKIZBLTFTXMPMSJCQKWHVBTVVXNJFMNWGIQLWPRIXIWJHWXFTGIXLDDPENGRYLIPKIGKEEN"
Returns: 278
"VHJPPSUIPQCAEQNWNRNTDSUMDUONXFHOLLGEPKJDIOJBFIFRDRBSFZRZSUQRDMAIZXCIIBBHYABIFAKGMBEBLHSLFPCGPEFJULC"
Returns: 269
"DMCVRIMZSWUMOKKFZLJRIYQMZEYDSKDCGAKMXBZBLXCJRQUZWZEFEQBNVPPEDLSULAOZECXJSSLIQQVGIPCWFDTLSWX"
Returns: 285
"CNIHWXNQNOEIYAPTMRSRZNBGKVJIJIQATMPOBJXEIHRVKSEMBTEUZOUWSOGVQIVVLUDEQGBXJXLSOMWVJYDX"
Returns: 287
"GFRSYIFSMHJHTFIUFLRNDYOAIDWDJRGRYABFBARWPZGQMCIYTDEHYPNYGAXCBORTUNLUVQQKONJTEJZSUDKGY"
Returns: 265
"ZWACMCYOKJSHUWCQLESBFAHPBIGQTSHOWJGXJEPOKNILQYOIQJXPJLFSGPRSWCRHXWERHUUSEPCESXFOWYRDRUNIUODGVFMOFUPW"
Returns: 304
"VZTCGZTUYSCQIDSGXOOYWCNUNVWBUFNAUMAEFTTJXRLAQRLIYCERWDNVYITVBUFGPPBUALIFUSQDYQVHNJCUSKOPIGKJTEJTTVJ"
Returns: 316
"LIQJMOFERJBYOCGHBAPHQXEDOPJGAEWNZURKABNGOGRFFVUWUUWQDVEOPTDXMCEISJABUMKISFPHEKBQOVGDWXAULE"
Returns: 246
"DMXMAYIRGNQMKOLZHZWZFASSGXRGYSTPOGBCWHSZUMRZSFISHEYRHQNLBNWKANNJJJLJWWXLDWCJNWYAGXKQFWWKD"
Returns: 293
"LFKIKODOQGBAWDHECCKKJJUOHQKEWWXYGYJTFTQVMCHJTLXWVJJOZKLBMPSYSBXPAZQHYUWJAKISCKHTC"
Returns: 261
"NYOIXCDWNIGBHXNHLMHSQZUVRKIZNACWWTPRBQQLXJJNLJXRELAQHBYOBSVFFEERUSSSUGAXYQGAMMWSNCSU"
Returns: 225
"LFBBLBNTTXDFDFXHULGXNGLKYIXRBAUHNLFVUYGTUOQAOTMBXRRPCOPBLYVCJETARYUCSWKCJFRPJOAYGMPXTNUIIBSBOAHKI"
Returns: 327
"GHMOCMQOIQDBWIBMGBSILEKNYFMALTOHDASSDJNFSLGTYKQJUGTOPPIUZOJFPIREAIORMLTQFPEDZRHKJJRNMZKZMSS"
Returns: 253
"IHNXINOINNQYPXBPIJHBEEEYZWHFLLGYORXBHDYHWVDOIJLVTCZGRUWPAFORCDRSYYSVWLYVZTDMIFIUHWOQBWPMOEHHYVMH"
Returns: 245
"YOMURRVEEZAXPRJBWMKHRFVUMDDVUOKDLIFGBCHOAGMGQPZPWSJKUSUOXXHBVKKGOLBDADEBNCMNXALFYVI"
Returns: 223
"MLATWDRZJJNVVDSWBOFROVZWURIMNMANKGLXFYRPEVFPJGLBCPMQYJIOOHVLZDJVSWKUVGMQCJRBIHSPPFBXSHSOQEILXDPSRP"
Returns: 296
"CPDWJVPRKUUDXDFJWTZMRUYIIEHOWBBMFNGSVAWFWOWQILBIDIGYCIXZWDAHYVIATJWJKTJWFZIPQOCOSFWYHVLMECRKVCRCM"
Returns: 318
"NZMGOJWYCQTLIIPBUDZKVPESLIVSDANPHICLDUOYEYYXIDCSHRMXTHBAHKYYEFFCYOWPCZWESKJDXMKLLWU"
Returns: 246
"IGFIPWHIFBPHOUNSOOYWLXTVCCPQCJIHHCADLKRBJEFKZCPEQITFDOZKBKCURTHSQBBFWKUIIZKIKASBWQMLNBMXEO"
Returns: 243
"EEIRUYDCERACCGWZRFXCSGCINDWMCLAAMTKXBRPZZYGKXOZLHCVFGKXBIUKBAWOVOCKAQRTFAJNJWSFTUGR"
Returns: 268
"HEBJKNVFYIKVATPCQXFAEAFTLFXAERDMSGGJMHAMQNHSLXCYRJJKIJSCTZKEBQOLLSSSXYYFDOBZMTDILO"
Returns: 257
"LZBERQZTHWZTEQZZRKGMYPQQGLVUOXFPHTPPBIQACMIBXGYBBTYVWYNBMZNGNMIVKQVJZQIPKTBARKWLGROE"
Returns: 268
"PSJMQFXJPBQSPIMUPGYQPSYRHOCVBTHVPNITTYDRUPOIUMDKIZUKOCFWXNQIUSZNJCBESIWWZTATYIYR"
Returns: 253
"AABYZZ"
Returns: 2
Catches greedy solutions that remove groups of twins too eagerly.
"MUTASATBCEBNVVSKCILIAHQIANNIUXFWPEPGYKYIICAFQNNHQEYWAOEZWJOXUDXNWVDXEEMVGKXCVDQJKLCTVOCTQHOKPFGWZGTH"
Returns: 332
"BASGHDJKSGHDSAKJHDKSAHDJKASASDSADSADDS"
Returns: 135
"ASDFASDFASDF"
Returns: 56
"EFGGEMTNCNSFBAZBVWWNAUBWXBOBONEHVDFIDLFABKZLCYHHIQJTAPNAEAYQNUTJQVUONKUZJZWGAXUNEZMOQNPHWEKJHICOYTHB"
Returns: 315
"AAZZZZ"
Returns: 0
"AAZZ"
Returns: 0