Problem Statement
Formally, let Shuffle(X,Y) be the set of all strings that can be produced by shuffling X and Y together. We can define Shuffle inductively as follows:
- for any string X: Shuffle("",X) = Shuffle(X,"") = { X }
- for any letters a, b and any strings X, Y: Shuffle(aX,bY) = { aZ : Z belongs to Shuffle(X,bY) } united with { bZ : Z belongs to Shuffle(aX,Y) }.
Fox Ciel wants to register on TopCoder. In order to do that, she has to pick a handle. Ciel has a pet cat called S. As her handle, Ciel wants to use a string H with the following property: S can be obtained by shuffling H and some permutation of H together.
For example, if S="ceiiclel", one possible handle would be H="ciel": she can permute H to obtain H'="eicl", and then shuffle these H and H' together to produce S.
You are given the
Definition
- Class:
- FoxAndHandle
- Method:
- lexSmallestName
- Parameters:
- String
- Returns:
- String
- Method signature:
- String lexSmallestName(String S)
- (be sure your method is public)
Constraints
- S will contain between 2 and 50 characters, inclusive.
- Each character of S will be a lowercase letter ('a'-'z').
- Each letter ('a'-'z') will occur in S an even number of times.
Examples
"foxfox"
Returns: "fox"
There are five possible handles for Fox Ciel in this test case: "fox", "fxo", "ofx", "oxf", and "xfo". The lexicographically smallest one is "fox".
"ccieliel"
Returns: "ceil"
Note that "ciel" is also a valid handle, but "ceil" is lexicographically smaller.
"abaabbab"
Returns: "aabb"
"bbbbaaaa"
Returns: "bbaa"
"fedcbafedcba"
Returns: "afedcb"
"nodevillivedon"
Returns: "deilvon"
"bkbkaajaajkkmfmfliffajaelhihlihajaeohggholihoggo"
Returns: "baaaajkkfmfehhlihjgglioo"
"kcbbdikcbbdi"
Returns: "bbdikc"
"aaaaaaaaaaaaaaaaaa"
Returns: "aaaaaaaaa"
"hhhh"
Returns: "hh"
"adadaddebecbaedeebbadadaddebecbaedeebb"
Returns: "aaaabbddddebecbedee"
"liahkaliahka"
Returns: "aalihk"
"ghdhahcfegahcgafhfhabghdhahcfegahcgafhfhab"
Returns: "aaaabghdhhcfeghcgfhfh"
"lbdlbd"
Returns: "bdl"
"nssnlatrvxqgdcatobphpnssnlatrvxqgdcatobphp"
Returns: "aabhnssnltrvxqgdctopp"
"nstnst"
Returns: "nst"
"kkjolfghvkkjolfghv"
Returns: "fghkkjolv"
"jbofhjljgjbofhjljg"
Returns: "bfgjohjlj"
"nfilggcacgnfilggcacg"
Returns: "acgnfilgcg"
"abhnaccicabhnaccic"
Returns: "aabhnccic"
"efbaebadacafecabcefaefbaebadacafecabcefa"
Returns: "aaaaaaefbebdcfecbcef"
"idfbieidfbie"
Returns: "beidfi"
"cbjfidccahfhjeabcbjfidccahfhjeab"
Returns: "aabcbjfidcchfhje"
"umnlhebpumbronkquumnlhebpumbronkqu"
Returns: "bbkqumnlhepumronu"
"uliwgjuuliwgju"
Returns: "gjuliwu"
"bncmhohshdabncmhohshda"
Returns: "abncmhohshd"
"cbbbabbaaacabcccaacabcbbbabbaaacabcccaacab"
Returns: "aaaaaaaabcbbbbbcbcccc"
"pngilmanqiodjmjqlapngilmanqiodjmjqla"
Returns: "aapngilmnqiodjmjql"
"aaabbbaaaaaabbaaabbbaaaaaabb"
Returns: "aaaaaaaaabbbbb"
"feekcffkfeekcffk"
Returns: "cfeekffk"
"bfebaabfebaa"
Returns: "aabfeb"
"hoiphoip"
Returns: "hiop"
"dfcqqdfhjenirnllhbmdfcqqdfhjenirnllhbm"
Returns: "bdfcqqdfhjenirnllhm"
"aa"
Returns: "a"
"caefdedcdecaefdedcde"
Returns: "accefdedde"
"kmmllclfimjaidgkmmllclfimjaidg"
Returns: "adgkmmllclfimji"
"aaaaaabaababbabaaaaaabaababbab"
Returns: "aaaaaaaaaabbbbb"
"kbsouijvfaabvkbsouijvfaabv"
Returns: "aabkbsouijvfv"
"smweaamsmweaam"
Returns: "aamsmwe"
"chch"
Returns: "ch"
"ff"
Returns: "f"
"bbababbaba"
Returns: "aabbb"
"cbdifojmjbndocbdifojmjbndo"
Returns: "bbcdifojmjndo"
"fkcbejiafcfjcjimmjjghmdeafkcbejiafcfjcjimmjjghmdea"
Returns: "aafkcbejifcfjcjimmjjghmde"
"hgdifclibebibgjglkjnhkbhgdifclibebibgjglkjnhkb"
Returns: "bbbbhgdifclieigjglkjnhk"
"aaaaaaaaaaaaaaaa"
Returns: "aaaaaaaa"
"bhigdikmkgdipbkibjbhigdikmkgdipbkibj"
Returns: "bbbhigdikmkgdipkij"
"acabacab"
Returns: "aabc"
"ee"
Returns: "e"
"bgbg"
Returns: "bg"
"hnpbafrebbhnpbafrebb"
Returns: "abbhnpbfre"
"thcgupthcgup"
Returns: "cgpthu"
"accbabadeeaccbabadee"
Returns: "aaaccbbdee"
"fokgpenjjlrefajhepfokgpenjjlrefajhep"
Returns: "aefokgpenjjlrefjhp"
"ljombhhosdhcpmnolibgdkiljombhhosdhcpmnolibgdki"
Returns: "bbdiljomhhosdhcpmnolgki"
"jlpomfbglenmdqcjlpomfbglenmdqc"
Returns: "bcjlpomfglenmdq"
"hshs"
Returns: "hs"
"cohvhooorsffjrmmontivbjcohvhooorsffjrmmontivbj"
Returns: "bcohvhooorsffjrmmontivj"
"icejddraacdpliiefpegrospicejddraacdpliiefpegrosp"
Returns: "aacdeegicejddrpliifprosp"
"oo"
Returns: "o"
"koseomlnmohajlbnbphghkoseomlnmohajlbnbphgh"
Returns: "abbghkoseomlnmohjlnph"
"dsds"
Returns: "ds"
"kefcfgicdjbbahikefcfgicdjbbahi"
Returns: "ahikefcfgcdjbbi"
"ghgh"
Returns: "gh"
"khhejxlkxmpjmsfitdgkeqkhhejxlkxmpjmsfitdgkeq"
Returns: "dekhhejxlkxmpjmsfitgkq"
"jobgncfidoaanmomnhcbhakjobgncfidoaanmomnhcbhak"
Returns: "aaajobgncfidonmomnhcbhk"
"gvhfhkuivvufuhpbgvhfhkuivvufuhpb"
Returns: "bgvhfhkuivvufuhp"
"nidbednljlkcnmdmljlfbhbnidbednljlkcnmdmljlfbhb"
Returns: "bbbnidednljlkcnmdmljlfh"
"fbeiibfbeiib"
Returns: "bbfeii"
"qtptpsdtgcekqtptpsdtgcek"
Returns: "cekqtptpsdtg"
"qrnjnqorrgkakenlcrlllqrnjnqorrgkakenlcrlll"
Returns: "aclllqrnjnqorrgkkenlr"
"nrdbqiinjaqomibodlilsbnrdbqiinjaqomibodlilsb"
Returns: "abbnrdbqiinjqomiodlils"
"qieppnjcskjplupeamgqpqtqieppnjcskjplupeamgqpqt"
Returns: "agpqiepnjcskjplupemqpqt"
"ffjaibhcglhkiffjaibhcglhki"
Returns: "abcffjihglhki"
"hqchbpqghmvpgcepdnvblhqchbpqghmvpgcepdnvbl"
Returns: "bbhqchpqghmvpgcepdnvl"
"ccfcccdcfdeddcaebfbccfcccdcfdeddcaebfb"
Returns: "abbccfcccdcfdeddcef"
"opoepcibabfpbjdickiopoepcibabfpbjdicki"
Returns: "abbciopoepbfpjdicki"
"wqgrftamjcgtammulqabmrwipwqgrftamjcgtammulqabmrwip"
Returns: "aaabipwqgrftmjcgtmmulqmrw"
"mftoncoadnibksdfmftoncoadnibksdf"
Returns: "abdfmftoncodniks"
"greqceanereokwhvptuaiqgreqceanereokwhvptuaiq"
Returns: "aagreqcenereokwhvptuiq"
"dd"
Returns: "d"
"kihmilalfmkihmilalfm"
Returns: "afkihmillm"
"eobkhpceobkhpc"
Returns: "bceokhp"
"unlgmoxnomsinlunlgmoxnomsinl"
Returns: "gilunlmoxnomsn"
"kdqqrjdejoqlinkdqqrjdejoqlin"
Returns: "ddeikqqrjjoqln"
"fgacafhffcaceebfgedafafgacafhffcaceebfgedafa"
Returns: "aaaaafgcfhffcceebfgedf"
"efdeefde"
Returns: "deef"
"ebacaeebacae"
Returns: "aaebce"
"aohjpioefipaohjpioefip"
Returns: "aefiohjpiop"
"ccbabbaaccbabbaa"
Returns: "aaaccbbb"
"alcfickgoajhfcihalcfickgoajhfcih"
Returns: "aachlcfickgojfih"
"bealcdbhbjefcfcbealcdbhbjefcfc"
Returns: "abbbelcdhjefcfc"
"phddddanqnhqqrkamihkaphddddanqnhqqrkamihka"
Returns: "aaaphddddnqnhqqrkmihk"
"hmlhicfnihlonninecfoohmlhicfnihlonninecfoo"
Returns: "ccfhmlhifnihlonnineoo"
"jcjlnkkcamahcacjcjlnkkcamahcac"
Returns: "aaacjcjlnkkcmhc"
"bcbecfdicbfgchccfaefecbcbecfdicbfgchccfaefec"
Returns: "abcbecfdicbfgchccfefec"
"cjaffaknjkcjaffaknjk"
Returns: "aacjffknjk"
"jgbbbiaaeafacggcbcjgbbbiaaeafacggcbc"
Returns: "aaaabcjgbbbiefcggc"
"ccbdccebheihcbefcdbhhbgccbdccebheihcbefcdbhhbg"
Returns: "bbbbbccdcceheihcefcdhhg"
"nbnknbnk"
Returns: "bknn"
"afbacdbeafbacdbe"
Returns: "aabefbcd"
"ldmeqhgnrrfocfhfoldmeqhgnrrfocfhfo"
Returns: "cffldmeqhgnrrfoho"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Returns: "aaaaaaaaaaaaaaaaaaaaaaa"
"hfcchijgdajffcdcchfcchijgdajffcdcc"
Returns: "accchfcchijgdjffd"
"fqatwhboemrpxauxmxlfqatwhboemrpxauxmxl"
Returns: "aafqtwhboemrpxuxmxl"
"dgdeafheiiebdfhkdhdgdeafheiiebdfhkdh"
Returns: "abdddgdefheiiefhkh"
"dqbqfrchfombkgdqbqfrchfombkg"
Returns: "bbdqqfrchfomkg"
"bbbaab"
Returns: "bab"
"foxfoxfoxfoxfoxfox"
Returns: "fffooxoxx"
"zzyyxxaabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvv"
Returns: "zyxabcdefghijklmnopqrstuv"
"fkhtbqsnuegusptebdgbhbfolnqpbdltrohkbmbsrnlbhsltmn"
Returns: "begubbbflnqpdltohkmsrhstn"
"baba"
Returns: "ab"
"mqxmhlvqczcaqzlyezvkqnkkcxenukqjjqeazcvueswvhwsqqy"
Returns: "malezkcxenkqjqzcvusvhwqqy"
"aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyy"
Returns: "abcdefghijklmnopqrstuvwxy"
"ccaacc"
Returns: "acc"
"adefghadefghciklomciklomprtyuprtyulooppoolyurttruy"
Returns: "adefghcikllmooppoyurttruy"
"zyxzyxzyxzyxzyxzyxzyxzyxzyxzyxzyxzyxzyxzyxzyxzyxaa"
Returns: "xxxxxxxxzyzyzyzyzyzyzyzya"
"zzyyxxwwvvuuttssrrqqppoonnmmllkkjjiihhggffeeddccbb"
Returns: "zyxwvutsrqponmlkjihgfedcb"
"zyxwvutsrqponmlkjihgfedcbzyxwvutsrqponmlkjihgfedcb"
Returns: "bzyxwvutsrqponmlkjihgfedc"
"abba"
Returns: "ab"
"abbbacaabc"
Returns: "ababc"
"azzzzaaa"
Returns: "azza"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Returns: "aaaaaaaaaaaaaaaaaaaaaaaaa"
"yxwvutsrqponmlkjihgfedcbayxwvutsrqponmlkjihgfedcba"
Returns: "ayxwvutsrqponmlkjihgfedcb"
"ppaappbbllaallbbllvv"
Returns: "aappbblllv"
"jjhsrrthqbteqytyrwrsxmnoeegtrgaxbmkwepkazpinlizolr"
Returns: "jhbeqtyrrsegtaxmkwpinlzor"
"zzbccbaa"
Returns: "zbca"
"aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeee"
Returns: "aaaaabbbbbcccccdddddeeeee"
"bbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaa"
Returns: "bbbbbbbbbbbaaaaaaaaaaa"
"bccbaa"
Returns: "bca"
"zlnyznttyl"
Returns: "lnyzt"
"bccaab"
Returns: "bca"
"hnyhbxibuamwukxaymuncubdakwbatptihydkhkpjbzcpbpjyz"
Returns: "akxamuncubdkwbptihyhbpjyz"
"hebhajejba"
Returns: "bhaej"
"jihtsiigtisajsgojthuqtorrfnmntnrfnnnqagtmusourgjou"
Returns: "higiajsgjqtfmntnrntsourou"
"bbbbbbaabb"
Returns: "bbabb"
"nacnbacb"
Returns: "acnb"
"aayyxxwwvvuuttssrrqqppoonnmmllkkjjiihhggffeeddccbb"
Returns: "ayxwvutsrqponmlkjihgfedcb"
"afgzgfgaffgyyggafayafgayayafffzfgzyyzzyzgzyyzzagza"
Returns: "aaffgaaafgffgyyyzgzyyzzgz"
"babccbaaba"
Returns: "abcab"
"baab"
Returns: "ab"
"nazmysmosnmfjlnxjcgoraopzpnnxjpbmflnagpfbyajocfryy"
Returns: "ammosaopznnxjbflngpfjcryy"
"abzjubzuwebdehbwzwqkhfbjptkfkbwbfdbjbkzfpzfjzbtfqa"
Returns: "abbubdebwhbfkwfjkzfpzjztq"