718 最長重複子陣列

2021-10-08 14:11:11 字數 1246 閱讀 8524

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

示例:輸入:

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

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

輸出:3

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

1.暴力生成所有子陣列,依次判斷。更直接的暴力。

2.dp,dp[i][j]表示a[:i],b[:j], dp[i[j]=1+dp[i-1][j-1] if a[i-1]==b[j-1] else 0

class solution:

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

tmp_a=set()

tmp_b=set()

res=0

def get(x):

tmp=set()

for i in range(len(x)):

for j in range(i,len(x)):

tmp.add(str(x[i:j+1]).replace("[","").replace("]","").replace(",",""))

return tmp

tmp_a=get(a)

tmp_b=get(b)

for a in tmp_a:

for b in tmp_b:

if a==b:

res=max(res,a.count(' ')+1)

return res

class solution:

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

res=0

for i in range(len(a)):

for j in range(len(b)):

k=0while i+kint:

m,n=len(a),len(b)

res=0

dp=[[0 for _ in range(n+1)] for _ in range(m+1)]

for i in range(1,m+1):

for j in range(1,n+1):

if a[i-1]==b[j-1]:

dp[i][j]=dp[i-1][j-1]+1

res=max(res,dp[i][j])

return res

718 最長重複子陣列

給兩個整數陣列a和b,返回兩個陣列中公共的 長度最長的子陣列的長度。目錄 1 題目分析 2 解題分析 3 示例 1 輸入 a 1,2,3,2,1 b 3,2,1,4,7 輸出 3 解釋 長度最長的公共子陣列是 3,2,1 求兩個陣列公共的子陣列的長度,那麼可以用較短的那個字串去匹配長的字串,使用列舉...

718 最長重複子陣列

給兩個整數陣列 a 和 b 返回兩個陣列中公共的 長度最長的子陣列的長度。可以用dp i j 表示a陣列從i位置,b陣列從j位置開始的最長子陣列長度,由此可知,當a i b j 時,dp i j 取決與dp i 1 j 1 的結果,也即使dp i j dp i 1 j 1 1,當a i b j 時,...

718 最長重複子陣列

題目描述 給兩個整數陣列 a 和 b 返回兩個陣列中公共的 長度最長的子陣列的長度。示例 1 輸入 a 1,2,3,2,1 b 3,2,1,4,7 輸出 3 解釋 長度最長的公共子陣列是 3,2,1 題目分析 這道題和兩個字串的最長公共子串行類似,不同之處在於子陣列是連續的,那麼只需要改變一下遞推公...