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

Skip to content

Commit cc89ee7

Browse files
committed
Refactor longest common subsequence solution by removing redundant implementations and optimizing the dynamic programming approach
1 parent 767b979 commit cc89ee7

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)