2023年7月6日09:11:01
難度:中等題目:用時:4個小時了吧,大霧
分類:動態規劃、雜湊、二分查詢、滑動視窗
給兩個整數陣列 a 和 b ,返回兩個陣列中公共的、長度最長的子陣列的長度。
示例:
輸入:a: [1,2,3,2,1]
b: [3,2,1,4,7]
輸出:3
解釋:長度最長的公共子陣列是 [3, 2, 1] 。
解法:
動態規劃
滑動視窗
雜湊+二分查詢
自我嘗試——超時
一開始,沒思路,看了眼提示(動態規劃),於是腦子裡和本子上出現了下面這個表12
3213
①2①①
1①①4
7然而,腦子裡是這個表,思想好像跑偏了,知道是dp,但不知道要怎麼寫,遞推公式也不知道。。。與其說不知道,不如說根本沒往那想
/*
* 錯了兩個例子,然後超時了。。。
* 想到的是dp,但是敲著敲著我就不知道我在幹嘛了
*/var
findlength
=function(a
,b)// console.log(mp);
let maxans =
;for
(let i =
0; i <
b.length; i++
)else
}else
}// console.log("結束", ans + "\n");
maxans = ans.length > maxans.length ? ans : maxans;}}
}}return maxans.length;
// return maxans;};
console.
log(
findlength([
1,2,
3,2,
1],[
3,2,
1,4,
7]))
;console.
log(
findlength([
0,0,
0,0,
0],[
0,0,
0,0,
0]))
;console.
log(
findlength([
0,1,
1,1,
1],[
1,0,
1,0,
1]))
;
正解1——動態規劃
emmmm,自己寫的解法又長…又難理解。。。還是錯的。。。還真的,,,正確的解法必定精簡
// 動態規劃
varfindlength
=function(a
,b)var ans =0;
for(
let i =
a.length -
1; i >=
0; i--)}
// console.log(dp);
return ans;};
console.
log(
findlength([
1,2,
3,2,
1],[
3,2,
1,4,
7]))
;
最長重複子陣列(LeetCode)
題目鏈結 給兩個整數陣列 a 和 b 返回兩個陣列中公共的 長度最長的子陣列的長度。示例 輸入 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和最長公共子串問題相似,可以使用動態規劃...
LeetCode 最長重複子串?
q 給出乙個字串 s,考慮其所有重複子串 s 的連續子串,出現兩次或多次,可能會有重疊 返回任何具有最長可能長度的重複子串。如果 s 不含重複子串,那麼答案為 示例 1 輸入 banana 輸出 ana 示例 2 輸入 abcd 輸出 a 1.字串編碼法 具體可以去看rabin karp 字串編碼 ...
最長重複子串
首先這是乙個單字串問題。子字串r 在字串l 中至少出現兩次,則稱r 是l 的重複子串。重複子串又分為可重疊重複子串和不可重疊重複子串。方法 kmp演算法求解 在kmp演算法的關鍵就是求解next陣列,針對next j k,可以得到p 0,1,k 1 p j k,j k 1,j 1 看到p 0,1,k...