def longest_palindrome(s):
if not s:
return ""
def check_palindrome(t):
for i in range(0, len(t) // 2 + len(t) % 2):
if t[i] != t[-1 * i - 1]:
return False
return True
value = [1 for i in range(len(s))]
for i in range(1, len(s)):
min_ = max(i - value[i - 1] - 1, 0)
for j in range(min_, i + 1):
if s[j] == s[i]:
if check_palindrome(s[j + 1: i]):
value[i] = i + 1 - j
break
# print(value)
max_value = value[0]
ind = 0
for k in range(len(value)):
if value[k] > max_value:
max_value = value[k]
ind = k
return s[ind + 1 - max_value:ind + 1]
# 测试通过
s_list =["", "a", "aa", "aba", "abcba", "abcdefeg"]
for s in s_list:
print(longest_palindrome(s))
动态规划思维