Problem Statement
Input string: "HELLO" (quotes for clarity only)Pattern: O OLO OLLLO OLLELLO OLLEHELLO OLLELLO OLLLO OLO O
Input string: "TC" (quotes for clarity only)Pattern: C CTC C
Input string: "ABCD" (quotes for clarity only)Pattern: D DCD DCBCD DCBABCD DCBCD DCD D
After constructing the patterns, I noticed something interesting. Starting with the first letter of the input string (which appears only once in the very center of the pattern), I can trace a path outwards toward the edges, spelling out the original input string. Of course, I only move Up, Down, Left and Right from any letter. I'm now perplexed because I want to know how many ways the original input string can be spelled out in the pattern. I must always end at an edge, and I can't go over one letter more than once while spelling a word.
Create a class WordPattern containing the method countWords which takes aString word as input. The method should return along which is the number of ways the original input can be spelled out in the pattern according to my rules.
Definition
- Class:
- WordPattern
- Method:
- countWords
- Parameters:
- String
- Returns:
- long
- Method signature:
- long countWords(String word)
- (be sure your method is public)
Notes
- Remember, I only move Up, Down, Left and Right from any letter to the next letter and never use a letter twice.
Constraints
- word will contain between 1 and 50 characters inclusive.
- word will contain only uppercase letters ('A'-'Z').
Examples
"HELLO"
Returns: 60
"TC"
Returns: 4
"ABCDEFGHIJKLMNOPQRST"
Returns: 2097148
"ALKSJDLGHSDGH"
Returns: 16380
"SDG"
Returns: 12
"A"
Returns: 1
"AB"
Returns: 4
"ABC"
Returns: 12
"ABCD"
Returns: 28
"ABCDE"
Returns: 60
"ABCDEF"
Returns: 124
"ABCDEFG"
Returns: 252
"ABCDEFGH"
Returns: 508
"ABCDEFGHI"
Returns: 1020
"ABCDEFGHIJ"
Returns: 2044
"ABCDEFGHIJK"
Returns: 4092
"ABCDEFGHIJKL"
Returns: 8188
"ABCDEFGHIJKLM"
Returns: 16380
"ABCDEFGHIJKLMN"
Returns: 32764
"ABCDEFGHIJKLMNO"
Returns: 65532
"ABCDEFGHIJKLMNOP"
Returns: 131068
"ABCDEFGHIJKLMNOPQ"
Returns: 262140
"ABCDEFGHIJKLMNOPQR"
Returns: 524284
"ABCDEFGHIJKLMNOPQRS"
Returns: 1048572
"ABCDEFGHIJKLMNOPQRST"
Returns: 2097148
"ABCDEFGHIJKLMNOPQRSTU"
Returns: 4194300
"ABCDEFGHIJKLMNOPQRSTUV"
Returns: 8388604
"ABCDEFGHIJKLMNOPQRSTUVW"
Returns: 16777212
"ABCDEFGHIJKLMNOPQRSTUVWX"
Returns: 33554428
"ABCDEFGHIJKLMNOPQRSTUVWXY"
Returns: 67108860
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Returns: 134217724
"ABCDEFGHIJKLMNOPQRSTUVWXYZA"
Returns: 268435452
"ABCDEFGHIJKLMNOPQRSTUVWXYZAB"
Returns: 536870908
"ABCDEFGHIJKLMNOPQRSTUVWXYZABC"
Returns: 1073741820
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCD"
Returns: 2147483644
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDE"
Returns: 4294967292
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF"
Returns: 8589934588
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG"
Returns: 17179869180
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGH"
Returns: 34359738364
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI"
Returns: 68719476732
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ"
Returns: 137438953468
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJK"
Returns: 274877906940
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL"
Returns: 549755813884
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM"
Returns: 1099511627772
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN"
Returns: 2199023255548
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNO"
Returns: 4398046511100
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP"
Returns: 8796093022204
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQ"
Returns: 17592186044412
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQR"
Returns: 35184372088828
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRS"
Returns: 70368744177660
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST"
Returns: 140737488355324
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU"
Returns: 281474976710652
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRTSTUV"
Returns: 1125899906842620
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRTSTUVW"
Returns: 2251799813685244
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Returns: 68719476732
"AA"
Returns: 4
"AAAAAAAAAAAAAAA"
Returns: 65532
"A"
Returns: 1
"R"
Returns: 1
"TC"
Returns: 4
"K"
Returns: 1
"XX"
Returns: 4
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ"
Returns: 137438953468
"T"
Returns: 1
"C"
Returns: 1
"H"
Returns: 1
"ABCDEFGHIJKLMNOPQRSTUVWXYZABBBHIZZZEPPPOAAQUTNNYII"
Returns: 2251799813685244
"HELLO"
Returns: 60
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Returns: 2251799813685244
"X"
Returns: 1
"MADAM"
Returns: 60
"ABCDEEFGEADESWJFOADNDOSMGSEOSKDLSSAKEOFMMMMMMMMMMM"
Returns: 2251799813685244