718 最长重复子数组
代码如下
func findLength(nums1 []int, nums2 []int) int { //三道题思路基本一致,dp[i][j]表示的是到第下标为i-1和j-1的两个数组重复元素的个数如果nums[i-1][j-1]相同,那么重复元素的个数要加1并且同时向后移动
dp := make([][]int,len(nums1)+1)
for i,_ := range dp {
dp[i] = make([]int,len(nums2)+1)
}
res := 0
for i :=1 ; i <= len(nums1) ; i++ {
for j := 1 ; j <= len(nums2) ; j++ {
if nums1[i-1] == nums2[j-1] {
dp[i][j] = dp[i-1][j-1]+1 //当前重复元素的个数是由之前元素重复个数推出来的
}
if dp[i][j] > res {
res = dp[i][j]
}
}
}
return res
}
1143 最长公共子序列
func longestCommonSubsequence(text1 string, text2 string) int {
dp := make([][]int,len(text1)+1)
for i,_ := range dp {
dp[i] = make([]int,len(text2)+1)
}
res := 0
for i := 1 ; i <=len(text1) ; i++ {
for j := 1 ; j <= len(text2) ; j++ {
if text1[i-1] == text2[j-1] {
dp[i][j] = dp[i-1][j-1]+1
}else {
dp[i][j] = max(dp[i-1][j],dp[i][j-1])
}
if dp[i][j] > res {
res = dp[i][j]
}
}
}
return res
}
func max(a,b int) int {
if a > b {
return a
}else {
return b
}
}
1035 不相交的线
func maxUncrossedLines(nums1 []int, nums2 []int) int {
dp := make([][]int,len(nums1)+1)
for i,_ := range dp {
dp[i] = make([]int,len(nums2)+1)
}
res := 0
for i := 1 ; i <=len(nums1) ; i++ {
for j := 1 ; j <= len(nums2) ; j++ {
if nums1[i-1] == nums2[j-1] {
dp[i][j] = dp[i-1][j-1]+1
}else {
dp[i][j] = max(dp[i-1][j],dp[i][j-1])
}
if dp[i][j] > res {
res = dp[i][j]
}
}
}
return res
}
func max(a,b int) int {
if a > b {
return a
}else {
return b
}
}