@@ -20,4 +20,79 @@ class Solution {
20
20
}
21
21
return dp[M ][N ]
22
22
}
23
- }
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
+ }
0 commit comments