最大回文子串是被研究得比较多的一个经典问题。最近月神想到了一个变种,对于一个字符串,如果不要求子串连续,那么一个字符串的最大回文子串的最大长度是多少呢。
数据范围:字符串长度满足
,字符串中仅包含 0~9 和大小写字母
每个测试用例输入一行字符串(由数字0-9,字母a-z、A-Z构成),字条串长度大于0且不大于1000.
输出该字符串的最长回文子串的长度。(不要求输出最长回文串,并且子串不要求连续)
adbca
3
因为在本题中,不要求回文子串连续,故最长回文子串为aba(或ada、aca)
因为不要求子串连续,所以字符串abc的子串有a、b、c、ab、ac、bc、abc7个
def max_sub_str_length(raw_str): dp = {} def length_from_l_to_r(l, r): if l == r: return 1 if l > r: return 0 if (l, r) in dp: return dp[(l, r)] sub_str_length = 0 if raw_str[l] == raw_str[r]: sub_str_length = 2 + length_from_l_to_r(l+1, r-1) else: sub_str_length = max(length_from_l_to_r(l+1, r), length_from_l_to_r(l, r-1)) dp[(l, r)] = sub_str_length return sub_str_length return length_from_l_to_r(0, len(raw_str)-1) raw_str = input() print(max_sub_str_length(raw_str))