File tree Expand file tree Collapse file tree 4 files changed +144
-0
lines changed
longest-repeating-character-replacement Expand file tree Collapse file tree 4 files changed +144
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a Node.
3
+ * public class Node {
4
+ * public var val: Int
5
+ * public var neighbors: [Node?]
6
+ * public init(_ val: Int) {
7
+ * self.val = val
8
+ * self.neighbors = []
9
+ * }
10
+ * }
11
+ */
12
+
13
+ class Solution {
14
+ // O(V+E) time / O(V) space
15
+ func cloneGraph( _ node: Node ? ) -> Node ? {
16
+ guard let node = node else {
17
+ return nil
18
+ }
19
+ var newNodeByVal = [ Int: Node] ( )
20
+ return copy ( node: node, newNodeByVal: & newNodeByVal)
21
+ }
22
+
23
+ func copy( node: Node , newNodeByVal: inout [ Int : Node ] ) -> Node {
24
+ if let node = newNodeByVal [ node. val] {
25
+ return node
26
+ }
27
+ var newNode = Node ( node. val)
28
+ newNodeByVal [ node. val] = newNode
29
+
30
+ for neighbor in node. neighbors {
31
+ guard let neighbor = neighbor else {
32
+ continue
33
+ }
34
+ let newNeighbor = copy ( node: neighbor, newNodeByVal: & newNodeByVal)
35
+ newNode. neighbors. append ( newNeighbor)
36
+ }
37
+ return newNode
38
+ }
39
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ // O(n) time / O(n) space
3
+ func characterReplacement( _ s: String , _ k: Int ) -> Int {
4
+ var windowStart = 0
5
+ var maxLength = 0
6
+ var maxCharacterRepeat = 0
7
+ var countByCharacter = [ Character: Int] ( )
8
+ var characters = Array ( s)
9
+
10
+ for windowEnd in 0 ..< characters. count {
11
+ countByCharacter [ characters [ windowEnd] , default: 0 ] += 1
12
+ maxCharacterRepeat = max ( maxCharacterRepeat, countByCharacter [ characters [ windowEnd] ] !)
13
+
14
+ var length = windowEnd - windowStart + 1
15
+ if length - maxCharacterRepeat <= k {
16
+ maxLength = max ( maxLength, length)
17
+ } else {
18
+ while ( windowEnd - windowStart + 1 ) - maxCharacterRepeat > k {
19
+ countByCharacter [ characters [ windowStart] ] ! -= 1
20
+ windowStart += 1
21
+ }
22
+ }
23
+ }
24
+ return maxLength
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ //dynamic programming
3
+ // O(n^2) time / O(n^2) space
4
+ func countSubstrings1( _ s: String ) -> Int {
5
+ var count = 0
6
+ var characters = Array ( s)
7
+ var isPalindromes = Array ( repeating: Array ( repeating: false , count: characters. count) , count: characters. count)
8
+
9
+ for i in 0 ..< characters. count {
10
+ isPalindromes [ i] [ i] = true
11
+ count += 1
12
+ }
13
+
14
+ for right in 1 ..< characters. count {
15
+ for left in 0 ..< right {
16
+ if characters [ left] == characters [ right]
17
+ && ( isPalindromes [ left+ 1 ] [ right- 1 ] || right- left <= 2 ) {
18
+ isPalindromes [ left] [ right] = true
19
+ count += 1
20
+ }
21
+ }
22
+ }
23
+
24
+ return count
25
+ }
26
+
27
+ //two pointers
28
+ // O(n^2) time / O(n) space
29
+ func countSubstrings2( _ s: String ) -> Int {
30
+ var count = 0
31
+ var characters = Array ( s)
32
+ var left : Int
33
+ var right : Int
34
+
35
+ for i in 0 ..< characters. count{
36
+ left = i
37
+ right = i
38
+
39
+ while left >= 0
40
+ && right < characters. count
41
+ && characters [ left] == characters [ right] {
42
+ count += 1
43
+
44
+ left -= 1
45
+ right += 1
46
+ }
47
+
48
+ left = i
49
+ right = i+ 1
50
+
51
+ while left >= 0
52
+ && right < characters. count
53
+ && characters [ left] == characters [ right] {
54
+ count += 1
55
+
56
+ left -= 1
57
+ right += 1
58
+ }
59
+ }
60
+
61
+ return count
62
+ }
63
+
64
+ }
65
+
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ // O(1) time / O(1) space
3
+ func reverseBits( _ n: Int ) -> Int {
4
+ var number = n
5
+ var reversed = 0
6
+
7
+ for _ in 0 ..< 32 {
8
+ reversed <<= 1
9
+ reversed |= ( number & 1 )
10
+ number >>= 1
11
+ }
12
+ return reversed
13
+ }
14
+ }
You can’t perform that action at this time.
0 commit comments