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 11class Solution {
22 // Time complexity O(N)
3- // Space complexity O(min(m,n) )
3+ // Space complexity O(N )
44 func lengthOfLongestSubstring( _ s: String ) -> Int {
55 if s. isEmpty {
66 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