5. Longest Palindromic Substring (Medium)

だいぶ間が空いてしまった。ちまちま解くのはやってます。
4.は Hard で解法をきちんと理解できていないので、一旦飛ばす。

https://leetcode.com/problems/longest-palindromic-substring/

最長の Palindrome (回文)を求める問題。
回文には中心が1文字のものと2文字のものがあるので、与えられた文字列に対して Bruteforce で中心から左と右に拡げられる位置を探せばよい。

回答

# @param {String} s  
# @return {String}  
def longest_palindrome(s)  
    max = 1  
    left = 0  
    right = 0  

    for i in 1...s.size  
        len = expand(s, i-1, i)  
        if len > max  
            max = len  
            left = i - max / 2  
            right = i + max /2 - 1  
        end  

        len = expand(s, i-1, i+1)  
        if len > max  
            max = len  
            left = i - (max - 1) / 2  
            right = i + (max - 1) / 2  
        end  
    end  

    s[left..right]  
end  

def expand(s, l, r)  
    while (l >= 0 && r <= s.size-1 && s[l] == s[r])  
        l -= 1  
        r += 1  
    end  

    r - l - 1  
end

最初にACしたコードはちょっと冗長だったので Solution を見た記憶で関数を切り出した。
これでもまだexpandで帰ってきた値からleftとrightを計算するところが冗長な気がする。そもそもlとrも返せばいいか?