Longest Palindrome

Write a method that takes in a string of lowercase letters (no uppercase letters, no repeats). Consider the *substrings* of the string: consecutive sequences of letters contained inside the string.  Find the longest such string of letters that is a palindrome.

Note that the entire string may itself be a palindrome.

You may want to use Array’s ‘slice(start_index, length)’ method, which returns a substring of length ‘length’ starting at index ‘start_index’:

“abcd”.slice(1, 2) == “bc”
“abcd”.slice(1, 3) == “bcd”
“abcd”.slice(2, 1) == “c”
“abcd”.slice(2, 2) == “cd”

Second time solving this, I annotated much more to clarify my thought process.

1. Write a method to check if a string is a palindrome to use in main method.

2. Build a list of potential substrings by slicing them out at different indices and lengths.

Example:

indices:  0 1 2 3 4 5 6 7 8
string:    a b c b d e f  f  e  =>  e f f e

idx = 0: a, ab, abc, abcb, abcbe, abcbdef, abcbdeff, abcbdeffe
idx = 1: b, bc, bcb, bcbd, bcbde, bcbdef, bcbdeff, bcbdeffe
idx = 2: c, cb, cbd, cbdef, cbdeff, cbdeffe
idx = 3: b, bd, bdef, bdeff, cbdeffe
idx = 4: d, de, def, deff, bdeffe
idx = 5: e, ef, eff, effe
idx = 6: f, ff, ffe
idx = 7: f, fe
idx = 8: e

3. Use previous ‘palindrome?’ method to check if each substring is a palindrome.

4. If it is a palindrome, compare its length to the previous palindrome and if
it’s greater, replace it as the longest palindrome.

Third time doing this, I realized I could set the default longest palindrome to an empty string instead of nil, and it should still work.