参考

理论支持:每当增加一个新的字母,最大回文串的长度只能增加1或者2,不可能增加更多,并且,新的最大回文串必然要包含这个字母!

证明:如果新增了一个字母,最大回文串的长度增加了3,这是不可能的,例如:abcdefgfedcba,当增加到最后的b或者a时,是不可能增加3个长度的,因为每增加一个字母,前面必然已经存在一个回文子串,且长度比新串小1或者小2.

所以,从头到尾扫描字符串,每增加一个新的字符,判断以这个字符结尾,且长度为maxLen+1或者maxLen+2的子串是否为回文,如果是,更新最大回文子串

def check_huiwen(s)
flag = true
(0...s.length).each{|i|
if s[i] != s[s.length-1-i]
flag = false
break
end
}
flag
end

strs = STDIN.gets.delete("\n")
len_max = 0 # 当前回文子串长度
(0...strs.length).each{|i|
if i == 0
len_max = 1
next
end
if check_huiwen(strs[i-len_max, len_max+1])
len_max += 1
elsif i-len_max-1 >= 0 && check_huiwen(strs[i-len_max-1,len_max+2])
len_max += 2;
end
}

puts len_max