@@ -101,18 +101,68 @@ We cannot draw 3 uncrossed lines, because the line from A[1]=4 to B[2]=4 will in
101
101
102
102
## Solutions
103
103
104
+ Longest common sub-sequences
105
+
104
106
<!-- tabs:start -->
105
107
106
108
### ** Python3**
107
109
108
110
``` python
109
-
111
+ class Solution :
112
+ def maxUncrossedLines (self , nums1 : List[int ], nums2 : List[int ]) -> int :
113
+ m, n = len (nums1), len (nums2)
114
+ dp = [[0 ] * (n + 1 ) for i in range (m + 1 )]
115
+ for i in range (1 , m + 1 ):
116
+ for j in range (1 , n + 1 ):
117
+ if nums1[i - 1 ] == nums2[j - 1 ]:
118
+ dp[i][j] = dp[i - 1 ][j - 1 ] + 1
119
+ else :
120
+ dp[i][j] = max (dp[i - 1 ][j], dp[i][j - 1 ])
121
+ return dp[m][n]
110
122
```
111
123
112
124
### ** Java**
113
125
114
126
``` java
127
+ class Solution {
128
+ public int maxUncrossedLines (int [] nums1 , int [] nums2 ) {
129
+ int m = nums1. length;
130
+ int n = nums2. length;
131
+ int [][] dp = new int [m + 1 ][n + 1 ];
132
+ for (int i = 1 ; i <= m; i++ ) {
133
+ for (int j = 1 ; j <= n; j++ ) {
134
+ if (nums1[i - 1 ] == nums2[j - 1 ]) {
135
+ dp[i][j] = dp[i - 1 ][j - 1 ] + 1 ;
136
+ } else {
137
+ dp[i][j] = Math . max(dp[i - 1 ][j], dp[i][j - 1 ]);
138
+ }
139
+ }
140
+ }
141
+ return dp[m][n];
142
+ }
143
+ }
144
+ ```
115
145
146
+ ### ** C++**
147
+
148
+ ``` cpp
149
+ class Solution {
150
+ public:
151
+ int maxUncrossedLines(vector<int >& nums1, vector<int >& nums2) {
152
+ int m = nums1.size(), n = nums2.size();
153
+ vector<vector<int >> dp(m + 1, vector<int >(n + 1));
154
+ for (int i = 1; i <= m; ++i) {
155
+ for (int j = 1; j <= n; ++j) {
156
+ if (nums1[ i - 1] == nums2[ j - 1] ) {
157
+ dp[ i] [ j ] = dp[ i - 1] [ j - 1 ] + 1;
158
+ } else {
159
+ dp[ i] [ j ] = max(dp[ i - 1] [ j ] , dp[ i] [ j - 1 ] );
160
+ }
161
+ }
162
+ }
163
+ return dp[ m] [ n ] ;
164
+ }
165
+ };
116
166
```
117
167
118
168
### **...**
0 commit comments