File tree Expand file tree Collapse file tree 2 files changed +54
-0
lines changed
longest-common-subsequence Expand file tree Collapse file tree 2 files changed +54
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ // Time O(V+E)
3
+ // Space O(V)
4
+ func cloneGraph( _ node: Node ? ) -> Node ? {
5
+ guard let node = node else { return nil }
6
+
7
+ var visited : [ Int : Node ] = [ : ]
8
+ var queue : [ Node ] = [ ]
9
+
10
+ let firstNode = Node ( node. val)
11
+ visited [ node. val] = firstNode
12
+
13
+ queue. append ( node)
14
+
15
+ while !queue. isEmpty {
16
+ let currentNode = queue. removeFirst ( )
17
+
18
+ for neighbor in currentNode. neighbors {
19
+ guard let neighbor = neighbor else { continue }
20
+
21
+ if let clonedNeighbor = visited [ neighbor. val] {
22
+ visited [ currentNode. val] !. neighbors. append ( clonedNeighbor)
23
+ } else {
24
+ visited [ neighbor. val] = Node ( neighbor. val)
25
+ visited [ currentNode. val] !. neighbors. append ( visited [ neighbor. val] )
26
+ queue. append ( neighbor)
27
+ }
28
+ }
29
+ }
30
+
31
+ return firstNode
32
+ }
33
+ }
34
+
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ // Time (MN)
3
+ // Space (MN)
4
+ func longestCommonSubsequence( _ text1: String , _ text2: String ) -> Int {
5
+ var dp = Array ( repeating: Array ( repeating: 0 , count: text2. count + 1 ) ,
6
+ count: text1. count + 1 )
7
+ for (i, char1) in text1. enumerated ( ) {
8
+ for (j, char2) in text2. enumerated ( ) {
9
+ if char1 == char2 {
10
+ dp [ i + 1 ] [ j + 1 ] = dp [ i] [ j] + 1
11
+ } else {
12
+ dp [ i + 1 ] [ j + 1 ] = max ( dp [ i + 1 ] [ j] , dp [ i] [ j + 1 ] )
13
+ }
14
+ }
15
+ }
16
+
17
+ return dp [ text1. count] [ text2. count]
18
+ }
19
+ }
20
+
You can’t perform that action at this time.
0 commit comments