Problem Statement
You are part of a team that is working on a piece of software to handle text compression. Your team has designed the compression algorithm as follows:
To compress a given string of text, two strings, each 3 characters in length, will be chosen as compression keys. The strings may contain any combination of capital letters and/or spaces. Then, a compressed string will be generated from the original such that replacing "*1" in the compressed string with the first string and replacing "*2" with the second string will recreate the original text.
For example, if the two compression keys are "FOO" and "BAR", then the compressed string "*2X*1" would decompress to "BARXFOO", and "*1*1 *2" would decompress to "FOOFOO BAR".
You have been tasked with writing a proof of concept implementation to test the effectiveness
of this compression scheme. You will be given a
Definition
- Class:
- CompressionText
- Method:
- shortestLength
- Parameters:
- String
- Returns:
- int
- Method signature:
- int shortestLength(String original)
- (be sure your method is public)
Constraints
- original will contain between 1 and 50 characters, inclusive.
- Each character of original will be an uppercase letter ('A'-'Z') or a space (' ').
Examples
"BARXFOO"
Returns: 5
The first example from the problem statement.
"FOOFOO BAR"
Returns: 7
The second example from the problem statement.
"ABCDEFGHIJKLMNOPQRSTUVWXYABCDEFGHIJKLMNOPQRSTUVWXY"
Returns: 46
It's a long string, but no 3-character substring appears more than twice.
"QWERTYUIOPASDFGHJKLZXCVBNM"
Returns: 24
Here, no substring repeats itself at all. The best we can do is to pick any two substrings to replace.
"BBAAAABBBBAAABABABBBABABAAABABABAAABBAABABBBABAAAB"
Returns: 40
"AAA"
Returns: 2
"QJVEYIKAOCQCIAEYVTWMQGQNQDLUXHNFCQ"
Returns: 32
"EGGDKNPOWLJDXEXJTHSUHPLDXERNRBQCYPIPYJWNTNBJ"
Returns: 41
"ZDBTDYXLTIJNCMOLJZNJFTHA"
Returns: 22
"NOQVGHBYAZIKDNHYKFQXWBYSHEILRSBRFTKSCNBXF"
Returns: 39
"KKIEIXJSBWZQOYIDTNGMKSPBZ"
Returns: 23
"TOXPKPXKUKXLWWUHZTSVQIOUQBOSJNI"
Returns: 29
"KXZVHJSSQSLIORRLAZVDYWQL"
Returns: 22
"ZWLDFGGEDSKLLUOAQJJBGQQHWHQWUXVLUTSODSAFUMBOXYHCTB"
Returns: 48
"COPCXWMDBBFEEBPHIJQTRISOGUEDBNYZGRLDBPVJFUOV"
Returns: 42
"GWZCWWSUJVTHCJJZOKCGPBBWOUFZYUACYXNMSJDPKEKF"
Returns: 42
"JICHWNSIKCNHRIZOVBPQDSDXBJJYFGSDDGNITYHZJODHZPYSO"
Returns: 47
"AXZIUMTQENICMXPLLELFQOVTXCATKLYTMGWEANLHFSY"
Returns: 41
"ABEBGCCACAFGGCCDAEFGABAGDAADEADGCBAEC"
Returns: 34
"FCCDGCDCBFFEABBBBEGGCEDG"
Returns: 22
"DFFGCEGCFGACBE"
Returns: 12
"ACGAFEFADFGDCABAFBAAACGCCAGDGAEBBGBBEDGGDB"
Returns: 39
"KHMLNJMMNKHLIIIHHLNJIJIJIM"
Returns: 23
"HLKNJIIJHHKHMKNLLIIMNMIIJHLIH"
Returns: 26
"MHILHKNJLNMNLMLNJLJKNLHLLIKKLJNINJJJJLMIKNLH"
Returns: 40
"MNHMNMHMLILNHHHLMLJMIN"
Returns: 20
"UQRTSQOOPTQOUOUOURPTTPOPOPTQRUURPPTOTTPRRSSTUQ"
Returns: 42
"QOUQOPUURQPOPUURTRPPOOPOTQOQRRUTPRTSTPQRQTT"
Returns: 40
"UURUOPURUPPTROUOOROSPRURSRUPRUSSSQSQTUPPR"
Returns: 37
"USOQUTSOPUOSUTUPTOQPRPPPOSRUUOUUSTQPUTOORU"
Returns: 40
"JJJIIIIJIJJIJIJJJJIIJIIIJJJIIJJJIJJIJJIJIIIJJI"
Returns: 35
"LLKKKKKKLLKKLLKLLLLLKKLKKKKKKKLLKLLLKKKLKLLLKL"
Returns: 36
"JJJJJIJIIJJJIIJJIJJJJJJJJIIIIJIIIIIJJIIJJJJIIJIIII"
Returns: 39
"RRQRRQQQRRRQRQRQQRQRQRRQRRQRRRRRQRQRRRRRQRQQQQQQR"
Returns: 39
"IIHIHHHIHIHIHIIIHHHHHIIIIHHHIIIHHIHHHHIHHIIHII"
Returns: 36
"CDCCDDDCCCDDDCCCCCCDCDCDCCCCCCDDCCDDCDDCDCCDCCDD"
Returns: 37
"RSRSRSRRSSRRRSRSSSSRRRSSRSRSSSSSRSRRSRRSRRSRRSRSS"
Returns: 38
"HIIIHHHIIIIHHHHHHHHIIHHHHIHHIHIHIHHIHHHIHHHHII"
Returns: 36
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Returns: 34
"ABABA"
Returns: 4
"ABABAB"
Returns: 4
"ABABABA"
Returns: 5
"ABABABA"
Returns: 5
"ABABABAV"
Returns: 6
"Q O"
Returns: 2
"JTNMVCAVR B"
Returns: 9
"J FVSBPZLEZPGSJX"
Returns: 14
"YBHFJHKOHGZXPWEZSJGXAFFUBZDPYCQU"
Returns: 30
"ZRKAEAVURFTOBODEHKJHBXQPUFSNWPMNO"
Returns: 31
"QDBAMHALLJQX"
Returns: 10
"JFLZQDXIEKOIANNRVVTFWHR NO O"
Returns: 26
"XA UYLLYVNZ"
Returns: 9
"DCOXGTBN TOUEIYSSDAVB DTCPKWWQKTRHNWXUGWMT"
Returns: 40
"VIUS DROSTKOGPBFL"
Returns: 15
"EZAIKTDCERG"
Returns: 9
"QJREI PWYBRIZDKWIISAUXNEVVSZDRBWVGLYO"
Returns: 35
"UQZCRQJVH RIIDVXSPG COI"
Returns: 22
"RPFPZRL FEFKGNE"
Returns: 13
"BTPXZTWQOJOJVFYVHDJ VSXGC"
Returns: 23
"JHCGFNIZPM"
Returns: 8
"A"
Returns: 1
"BARXFOO"
Returns: 5
"ASDF"
Returns: 3
"AABBAABBBAABBA"
Returns: 10
"AAA"
Returns: 2
"E"
Returns: 1
"AA"
Returns: 2
"AAABB"
Returns: 4
"B"
Returns: 1
"ABCABCCABCAB"
Returns: 8
"ABC"
Returns: 2
" "
Returns: 1
"BABBBABBBBABBB"
Returns: 10
"DBDDEDBDEDAAADBDEDBDCCCDBDFFFDED"
Returns: 25
"ABABABABABABABABABABABABA"
Returns: 17
"HG DYIQMKQMKQNCHG NTXCLNTHG XQHG "
Returns: 27
"ASD"
Returns: 2
"BYGZIGSLBHLUDSLIGBYSLIGSLXVOAOAXVQUQUG"
Returns: 34
"QQQ"
Returns: 2
"XYZ"
Returns: 2
"AAABBAAAA"
Returns: 6
"AHAHAHAHAHKHAHAHAHAHA"
Returns: 15
"UVFGTTUQQPS UVFQES S UVNKGNQQPD"
Returns: 27
"AAAA"
Returns: 3
"AAABBB"
Returns: 4
"ABABABABABABABABA"
Returns: 12
"ABCDEF"
Returns: 4
"AAABBZAAAYABBUAAAWABB"
Returns: 16
"AABAABAABCCC"
Returns: 8
"ABCABCBCABCA"
Returns: 8
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Returns: 34
"XAABAABABAABA"
Returns: 9
"AHAHAHAHAHKHAHAHAHAHAKAHAHAHAHAHKHAHAHAHAHA"
Returns: 31
"AAABBABBAAAA"
Returns: 8
"BBBB"
Returns: 3
"ABABABABABABABABABABABABABABABABABABABABABABABABAB"
Returns: 34
"BBB"
Returns: 2
"IMPQZAGRIMPXIMP ZAGSZAIMPG"
Returns: 20
"ABAAAAAABACAAABABABAAA"
Returns: 16
"AAAQAAAWAAAEABAAABAYABAAABAUAAABAAAOAAABAAAPABAD"
Returns: 36
"ABABABABABABABABAB"
Returns: 12
"AABAABAABBAABAA"
Returns: 10
"ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCAB"
Returns: 34
"AHAHAHAHAHKHAHAHAHAHAKAHAHAHAHAHKHAHAHAHAHA"
Returns: 31