LeetCode 718 最長重複子陣列

2021-10-23 04:41:14 字數 2768 閱讀 9074

官方鏈結

給兩個整數陣列 a 和 b ,返回兩個陣列中公共的、長度最長的子陣列的長度。

示例 1:

輸入:

a: [1,2,3,2,1]

b: [3,2,1,4,7]

輸出: 3

解釋: 

長度最長的公共子陣列是 [3, 2, 1]。

說明:1 <= len(a), len(b) <= 1000

0 <= a[i], b[i] < 100

方案:

1. 滑動視窗

右指標遍歷短的列表(a):

(1) 如果此時的區域性列表(tmp_list)在另乙個列表(b)中,計算區域性列表(tmp_list)的長度;

(2) 否則,向右移動左指標(此處是偽左指標);

class solution:

def findlength(self, a: list[int], b: list[int]) -> int:

m = len(a)

n = len(b)

if m>n:

m, n, a, b = n, m, b, a

tmp_list =

result = 0

str_b = ',' + ','.join([str(i) for i in b]) + ','

for r in a:

if ',' + ','.join(tmp_list) + ',' in str_b:

result = max(result, len(tmp_list))

else:

tmp_list = tmp_list[1:]

return result

2. 滑動視窗(參考:錯開比較法)

這個方案比較耗時,暫時未想到進一步的優化方案。

具體**如下:

leetcode 718 最長重複子陣列

給兩個整數陣列a和b,返回兩個陣列中公共的 長度最長的子陣列的長度。輸入 a 1,2,3,2,1 b 3,2,1,4,7 輸出 3解釋 長度最長的公共子陣列是 3,2,1 動態規劃 dp i j a 0,i 和b 0,j 的最長重複子陣列 狀態轉移方程 python class solution d...

LeetCode 718 最長重複子陣列

給兩個整數陣列 a 和 b 返回兩個陣列中公共的 長度最長的子陣列的長度。示例 1 輸入 a 1,2,3,2,1 b 3,2,1,4,7 輸出 3 解釋 長度最長的公共子陣列是 3,2,1 說明 1 len a len b 1000 0 a i b i 100 lci問題,沒什麼好說的就是寫就完事了...

leetcode 718 最長重複子陣列

給兩個整數陣列 a 和 b 返回兩個陣列中公共的 長度最長的子陣列的長度。示例 1 輸入 a 1,2,3,2,1 b 3,2,1,4,7 輸出 3 解釋 長度最長的公共子陣列是 3,2,1 說明 1 len a len b 1000 0 a i b i 100 解題思路 定義dp i j 表示以a ...