Problem Statement
Consider a necklace composed of marbles of various colors arranged in a circle. The colors are represented by uppercase letters. We can describe a necklace with a string of characters as follows: start with any marble and go through all the marbles in either a clockwise or counter-clockwise direction, until the starting marble is reached again, meanwhile appending to the string the colors of the marbles in the order they are visited. Obviously, there could be many different strings describing the same necklace. For example, the necklace described by the string "CDAB" can also be described by seven other strings (see example 0).
You are given a
Definition
- Class:
- MarbleNecklace
- Method:
- normalize
- Parameters:
- String
- Returns:
- String
- Method signature:
- String normalize(String necklace)
- (be sure your method is public)
Constraints
- necklace will contain between 1 and 50 characters, inclusive.
- Each character of necklace will be an uppercase letter ('A'-'Z').
Examples
"CDAB"
Returns: "ABCD"
This necklace can be described by the eight strings "CDAB", "DABC", "ABCD", "BCDA", "CBAD", "DCBA", "ADCB", "BADC". "ABCD" comes first lexicographically.
"RGB"
Returns: "BGR"
"TOPCODER"
Returns: "CODERTOP"
"X"
Returns: "X"
"TC"
Returns: "CT"
"AUAHS"
Returns: "AHSAU"
"ANHJVFH"
Returns: "AHFVJHN"
"PZFWDNQER"
Returns: "DNQERPZFW"
"WEAPDWPTPH"
Returns: "AEWHPTPWDP"
"LHDFRFCXMPRBS"
Returns: "BRPMXCFRFDHLS"
"LSZRYKMVSDSSHIW"
Returns: "DSSHIWLSZRYKMVS"
"OGCKGAPJNOIZSMWYY"
Returns: "AGKCGOYYWMSZIONJP"
"ZGCZYWGIGEOQEDWJSR"
Returns: "CGZRSJWDEQOEGIGWYZ"
"HUKTGUANLMSKZXIREIWH"
Returns: "ANLMSKZXIREIWHHUKTGU"
"HRICRSSENBMIECNLJTXIUQW"
Returns: "BMIECNLJTXIUQWHRICRSSEN"
"VQANBHOXRYWEMGSAFJNPJPHWZ"
Returns: "AFJNPJPHWZVQANBHOXRYWEMGS"
"MQQYDYAYGIWSNHRRNDNDVENIKAC"
Returns: "ACMQQYDYAYGIWSNHRRNDNDVENIK"
"NDQBATCEYHCJRVBTYTBCVBBGOIINS"
Returns: "ABQDNSNIIOGBBVCBTYTBVRJCHYECT"
"PJSHKPGCGNROCMTHELKOXPXDGLFTGCV"
Returns: "CGNROCMTHELKOXPXDGLFTGCVPJSHKPG"
"JLRIUGHHRQMWYMNKQERQTCHJEFDHJARA"
Returns: "AJHDFEJHCTQREQKNMYWMQRHHGUIRLJAR"
"SONBZELGFEQMSULZCNPJODOWPEWLHJFOEW"
Returns: "BNOSWEOFJHLWEPWODOJPNCZLUSMQEFGLEZ"
"AJKQVGEULNYDTFOZUZJYGWTQJZEFYGUDQDHH"
Returns: "AHHDQDUGYFEZJQTWGYJZUZOFTDYNLUEGVQKJ"
"IQKPQMOPYXIDZKYWDBJMLWIQDEQYATEDNTSLFD"
Returns: "ATEDNTSLFDIQKPQMOPYXIDZKYWDBJMLWIQDEQY"
"BTDCTWOUDVWXHQCEUAPBFDVQLKQSBBLLWASLIVPV"
Returns: "APBFDVQLKQSBBLLWASLIVPVBTDCTWOUDVWXHQCEU"
"DLYDPZRTEWDEACZPGDXBKDXULYDQJODQOMWDBVBZOXQ"
Returns: "ACZPGDXBKDXULYDQJODQOMWDBVBZOXQDLYDPZRTEWDE"
"EOMRKCMQGUVBTJPWDOCJUACGGMFQXZFRXOETXCZKEUJQ"
Returns: "ACGGMFQXZFRXOETXCZKEUJQEOMRKCMQGUVBTJPWDOCJU"
"NDUAPAGSKEXWHNHZGINGLWDFZFJRBUZSBCIMOFADAUJIUXC"
Returns: "ADAFOMICBSZUBRJFZFDWLGNIGZHNHWXEKSGAPAUDNCXUIJU"
"LOIFNTRBPGOLCQWDUVTLKQTSPEYMXRITRXZXFJWBWEHQVCGSB"
Returns: "BLOIFNTRBPGOLCQWDUVTLKQTSPEYMXRITRXZXFJWBWEHQVCGS"
"HOJURSWOKLGZLHQXLVUXDCJJCVQGVRVXPVDZJEFCOEWDXAPFMF"
Returns: "APFMFHOJURSWOKLGZLHQXLVUXDCJJCVQGVRVXPVDZJEFCOEWDX"
"JEWQWKYXPJPSJFZZQHNTSSOPFFRMXGGRXXQIXRYBLBMQEHDHHE"
Returns: "BLBMQEHDHHEJEWQWKYXPJPSJFZZQHNTSSOPFFRMXGGRXXQIXRY"
"FDMIOBNIAWJYMNNXIVUNCXHXHBUUFISVJLJWQTDRUOCIKPESHW"
Returns: "AINBOIMDFWHSEPKICOURDTQWJLJVSIFUUBHXHXCNUVIXNNMYJW"
"VFXQRQOUVPPTOKCPXYUQRDUYESBEATPMXJOCVSKDGIAWHJKLHA"
Returns: "AEBSEYUDRQUYXPCKOTPPVUOQRQXFVAHLKJHWAIGDKSVCOJXMPT"
"PUJODPYHGZCMYAUILYEZSQEBVVKTJIABFROIPCDLGGQLFAVXME"
Returns: "ABFROIPCDLGGQLFAVXMEPUJODPYHGZCMYAUILYEZSQEBVVKTJI"
"HOJUZALRLLLOHBHKICYEVRTHNOFJBFEGITGXCQSJSQDSWGJVQC"
Returns: "ALRLLLOHBHKICYEVRTHNOFJBFEGITGXCQSJSQDSWGJVQCHOJUZ"
"AABB"
Returns: "AABB"
"ABCABBBAAC"
Returns: "AABBBACBAC"
"CDADBA"
Returns: "ABDADC"
"A"
Returns: "A"
"AQCADT"
Returns: "ACQATD"
"EDCBABAAABCDE"
Returns: "AAABABCDEEDCB"
"EDCBABABCDE"
Returns: "ABABCDEEDCB"
"ALTABC"
Returns: "ABCALT"
"ZZZABBAAZZZZ"
Returns: "AABBAZZZZZZZ"
"ADACABACAD"
Returns: "ABACADADAC"
"ZEDDDCBABCDDDFZZZ"
Returns: "ABCDDDEZZZZFDDDCB"
"ABAZD"
Returns: "ABADZ"
"ABCD"
Returns: "ABCD"
"ASOFNBZELGFEQMSULZCNPJODOWPEWLHJFOEWAJFLAAFSSAA"
Returns: "AAASOFNBZELGFEQMSULZCNPJODOWPEWLHJFOEWAJFLAAFSS"
"AAZAZ"
Returns: "AAZAZ"
"ABAAC"
Returns: "AABAC"
"BBBB"
Returns: "BBBB"
"ABOOAARDVARK"
Returns: "AAOOBAKRAVDR"
"ABCBAABC"
Returns: "AABCABCB"
"ABCA"
Returns: "AABC"
"ABAAAABBCC"
Returns: "AAAABACCBB"
"SONBZELGFEQMSULZCNPJODOWPEWLHJFOEW"
Returns: "BNOSWEOFJHLWEPWODOJPNCZLUSMQEFGLEZ"
"BCABCDAAA"
Returns: "AAABCABCD"
"BBACBABAB"
Returns: "ABABBBACB"
"CBAD"
Returns: "ABCD"
"ABCHGSKDMSDSD"
Returns: "ABCHGSKDMSDSD"
"ABBA"
Returns: "AABB"
"ZZZZZZZZZZZZZZZZZZ"
Returns: "ZZZZZZZZZZZZZZZZZZ"
"BDFBDEC"
Returns: "BCEDBFD"
"ZZZZZZZZZZ"
Returns: "ZZZZZZZZZZ"
"ABCDDCAAZ"
Returns: "AACDDCBAZ"
"ZBRTABBTABBBBAB"
Returns: "ABBBBABZBRTABBT"
"BACDA"
Returns: "ABACD"
"ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
Returns: "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
"CAABA"
Returns: "AABAC"
"RGB"
Returns: "BGR"
"BAC"
Returns: "ABC"
"GGGBA"
Returns: "ABGGG"
"BACA"
Returns: "ABAC"
"AZCAZ"
Returns: "ACZAZ"
"ZEGZFE"
Returns: "EFZGEZ"
"CBABD"
Returns: "ABCDB"
"ABCAA"
Returns: "AAABC"
"EDCBA"
Returns: "ABCDE"
"BBBBBBBBBBAZAZ"
Returns: "ABBBBBBBBBBZAZ"
"DACCABCAD"
Returns: "ABCADDACC"
"AAAAAAABAAAAAA"
Returns: "AAAAAAAAAAAAAB"
"ZAZCAC"
Returns: "ACZAZC"
"YAZBAC"
Returns: "ABZAYC"
"FAFAAA"
Returns: "AAAFAF"
"TOPCODER"
Returns: "CODERTOP"
"BBCCBC"
Returns: "BBCBCC"
"BABCAA"
Returns: "AABABC"
"FGKABDBAJPRIADAVABAABVCS"
Returns: "AABAVADAIRPJABDBAKGFSCVB"
"ACABAC"
Returns: "ABACAC"
"DCACB"
Returns: "ACBDC"
"ACBDC"
Returns: "ACBDC"
"ABCDAB"
Returns: "ABABCD"