Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b84c927

Browse files
committed
Update 1143-longest-common-subsequence.kt
1 parent 0c0a712 commit b84c927

File tree

1 file changed

+1
-76
lines changed

1 file changed

+1
-76
lines changed

kotlin/1143-longest-common-subsequence.kt

Lines changed: 1 addition & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -20,79 +20,4 @@ class Solution {
2020
}
2121
return dp[M][N]
2222
}
23-
}
24-
25-
/*
26-
* Different solutions
27-
*/
28-
29-
// Recursion + Memoization, Time Complexity of O(n * m) and space complexity of O(n * m)
30-
class Solution {
31-
fun longestCommonSubsequence(t1: String, t2: String): Int {
32-
val n = t1.length
33-
val m = t2.length
34-
val dp = Array (n) { IntArray (m) { -1 } }
35-
36-
fun dfs(i: Int, j: Int): Int {
37-
if (i == n || j == m) return 0
38-
if (dp[i][j] != -1) return dp[i][j]
39-
40-
if (t1[i] == t2[j])
41-
dp[i][j] = 1 + dfs(i + 1, j + 1)
42-
else
43-
dp[i][j] = maxOf(dfs(i + 1, j), dfs(i, j + 1))
44-
45-
return dp[i][j]
46-
}
47-
48-
return dfs(0, 0)
49-
}
50-
}
51-
52-
// Top down DP, Time Complexity of O(n * m) and space complexity of O(n * m)
53-
class Solution {
54-
fun longestCommonSubsequence(t1: String, t2: String): Int {
55-
val n = t1.length
56-
val m = t2.length
57-
val dp = Array (n + 1) { IntArray (m + 1) }
58-
59-
for (i in n - 1 downTo 0) {
60-
for (j in m - 1 downTo 0) {
61-
if (t1[i] == t2[j])
62-
dp[i][j] = 1 + dp[i + 1][j + 1]
63-
else
64-
dp[i][j] = maxOf(dp[i + 1][j], dp[i][j + 1])
65-
}
66-
}
67-
68-
return dp[0][0]
69-
}
70-
}
71-
72-
// Optimized DP (Works both for both Top-down and Bottom-up, but here we use bottom-up approach)
73-
// Time Complexity of O(n * m) and space complexity of O(maxOf(n, m))
74-
class Solution {
75-
fun longestCommonSubsequence(t1: String, t2: String): Int {
76-
val m = t1.length
77-
val n = t2.length
78-
if (m < n) return longestCommonSubsequence(t2, t1)
79-
80-
var dp = IntArray (n + 1)
81-
82-
for (i in m downTo 0) {
83-
var newDp = IntArray (n + 1)
84-
for (j in n downTo 0) {
85-
if (i == m || j == n) {
86-
newDp[j] = 0
87-
} else if (t1[i] == t2[j]) {
88-
newDp[j] = 1 + dp[j + 1]
89-
} else {
90-
newDp[j] = maxOf(dp[j], newDp[j + 1])
91-
}
92-
}
93-
dp = newDp
94-
}
95-
96-
return dp[0]
97-
}
98-
}
23+
}

0 commit comments

Comments
 (0)