题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
我使用的是中心位置法,遍历去头去尾的字符串,若字符串左边右边相等,则两个指针定位左边右边,同时向外扩展直到不相等,则回文长度是right_point - left_point - 1;若字符串左边或者右边的某一位与该字符串相等,则指针定位这两个相等的字符,并同时向外扩展直到不相等,方法相同;算法时间复杂度N方,空间复杂度N,一个存放所有以该数为中心的回文长度
完整代码:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param A string字符串
# @param n int整型
# @return int整型
#
class Solution:
def getLongestPalindrome(self , A: str, n: int) -> int:
# write code here
dp = [1]*n
if n ==1:
return 1
for i in range(1,n-1):
if A[i-1] == A[i+1]:
left_point ,right_point = i-1 , i+1
elif A[i] == A[i-1]:
left_point ,right_point = i-1 , i
elif A[i+1] == A[i]:
left_point ,right_point = i , i+1
else:
continue
while left_point>=0 and right_point<n and A[left_point]==A[right_point]:
left_point -= 1
right_point += 1
dp[i] = right_point - left_point - 1
return max(dp)