python leetcode 最大回文數

2021-08-20 18:30:59 字數 677 閱讀 6746

直接暴力求解時間超出,選取manacher演算法

class solution:

def longestpalindrome(self, s):

t = '$'+'#'+'#'.join(s)+'#'+'&' #前後插入$&是為了防止越界,不需要進行邊界判斷

n = len(t)

p = [0] * n #每一處的回文半徑

c = r = 0 # r為當前訪問到的最右邊的值,c為此時對稱軸的位置

for i in range (1, n-1):

p[i] = (r > i) and min(r - i, p[2*c - i]) # equals to i' = c - (i-c)

while t[i + 1 + p[i]] == t[i - 1 - p[i]]:

p[i] += 1

if i + p[i] > r:

c, r = i, i + p[i]

# find the maximum element in p.

maxlen, centerindex = max((n, i) for i, n in enumerate(p))

return s[(centerindex - maxlen)//2: (centerindex + maxlen)//2]

python LeetCode 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null ...

python LeetCode 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

1 兩數之和 Python LeetCode

剛開始接觸演算法方面,好多都不懂,打算每刷一題就整理一下 給定乙個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解法一 剛開...