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