File tree Expand file tree Collapse file tree 5 files changed +108
-1
lines changed
longest-common-subsequence
longest-substring-without-repeating-characters Expand file tree Collapse file tree 5 files changed +108
-1
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
+
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
// Time complexity O(N)
3
- // Space complexity O(min(m,n) )
3
+ // Space complexity O(N )
4
4
func lengthOfLongestSubstring( _ s: String ) -> Int {
5
5
if s. isEmpty {
6
6
return 0
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ // Time O(n^2)
3
+ // Space O(n)
4
+ func countSubstrings( _ s: String ) -> Int {
5
+ let charArray = Array ( s)
6
+ var count = 0
7
+
8
+ for i in 0 ..< charArray. count {
9
+ count += countPalindrome ( charArray, i, i)
10
+ count += countPalindrome ( charArray, i, i + 1 )
11
+ }
12
+
13
+ return count
14
+ }
15
+
16
+ private func countPalindrome( _ s: [ Character ] , _ left: Int , _ right: Int ) -> Int {
17
+ var left = left
18
+ var right = right
19
+ var count = 0
20
+
21
+ while left >= 0 && right < s. count {
22
+ if s [ left] == s [ right] {
23
+ count += 1
24
+ } else {
25
+ break
26
+ }
27
+
28
+ left -= 1
29
+ right += 1
30
+ }
31
+
32
+ return count
33
+ }
34
+ }
35
+
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ // Time O(1)
3
+ // Space O(1)
4
+ func reverseBits( _ n: Int ) -> Int {
5
+ var number = n
6
+ var result = 0
7
+
8
+ for i in 0 ..< 32 {
9
+ let bit = number & 1
10
+ result = result << 1
11
+ result = result | bit
12
+ number = number >> 1
13
+ }
14
+
15
+ return result
16
+ }
17
+ }
18
+
You can’t perform that action at this time.
0 commit comments