題目連結:
題目意譯:
你被給定兩個整數陣列 nums1 和 nums2。我們在兩條分別的水平線上寫下 nums1 和 nums1 中的整數(按照它們給定的順序)。
我們可以劃一些連接線。其中每一條為連接兩數字 nums1[i] 和 nums2[j] 的直線,使得:
nums1[i] == nums2[j],且
我們劃的線不與其他連接線(即不是水平線的其他線)交錯。
注意到連接線就算是在端點上也不得交錯(即每一個數字只能屬於一條連接線上)。
回傳我們根據上述規則最多能劃出來的連接線之數量。
限制:
1 ≦ nums1.length, nums2.length ≦ 500
1 ≦ nums1[i], nums2[j] ≦ 2000
範例測資:
範例 1:
輸入: nums1 = [1,4,2], nums2 = [1,2,4]
輸出: 2
解釋: 我們可以劃出 2 條彼此不交錯的線,如上圖。
我們無法劃出 3 條彼此不交錯的線,因為 nums1[1] = 4 連到 num2[2] = 1 的線將會與 nums1[2] = 2 到 nums2[1] = 2 的線交錯。
範例 2:
輸入: nums1 = [2,5,1,2,5], nums2 = [10,5,2,1,5,2]
輸出: 3
範例 3:
輸入: nums1 = [1,3,7,1,7,5], nums2 = [1,9,2,5,1]
輸出: 2
解題思維:
可以看到題目定義的連接線等價於 nums1 和 nums2 的共同子序列(第一個條件代表著「共同」、第二個條件為「子序列」)。
因此題目實際上等價於是在求最長共同子序列(Longest Common Subsequence,LCS)之長度,解法參見
這題。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。