diff --git a/lcci/17.05.Find Longest Subarray/README.md b/lcci/17.05.Find Longest Subarray/README.md
index 20ad28c2b6c34..c9e91cc6ae5c5 100644
--- a/lcci/17.05.Find Longest Subarray/README.md	
+++ b/lcci/17.05.Find Longest Subarray/README.md	
@@ -158,6 +158,29 @@ function findLongestSubarray(array: string[]): string[] {
 }
 ```
 
+```swift
+class Solution {
+    func findLongestSubarray(_ array: [String]) -> [String] {
+        var vis: [Int: Int] = [0: -1]
+        var s = 0, mx = 0, k = 0
+        
+        for i in 0..<array.count {
+            s += array[i].first!.isLetter ? 1 : -1
+            if let j = vis[s] {
+                if mx < i - j {
+                    mx = i - j
+                    k = j + 1
+                }
+            } else {
+                vis[s] = i
+            }
+        }
+        
+        return Array(array[k..<(k + mx)])
+    }
+}
+```
+
 <!-- tabs:end -->
 
 <!-- end -->
diff --git a/lcci/17.05.Find Longest Subarray/README_EN.md b/lcci/17.05.Find Longest Subarray/README_EN.md
index d13417d8f1035..1c86cd3b36097 100644
--- a/lcci/17.05.Find Longest Subarray/README_EN.md	
+++ b/lcci/17.05.Find Longest Subarray/README_EN.md	
@@ -167,6 +167,29 @@ function findLongestSubarray(array: string[]): string[] {
 }
 ```
 
+```swift
+class Solution {
+    func findLongestSubarray(_ array: [String]) -> [String] {
+        var vis: [Int: Int] = [0: -1]
+        var s = 0, mx = 0, k = 0
+        
+        for i in 0..<array.count {
+            s += array[i].first!.isLetter ? 1 : -1
+            if let j = vis[s] {
+                if mx < i - j {
+                    mx = i - j
+                    k = j + 1
+                }
+            } else {
+                vis[s] = i
+            }
+        }
+        
+        return Array(array[k..<(k + mx)])
+    }
+}
+```
+
 <!-- tabs:end -->
 
 <!-- end -->
diff --git a/lcci/17.05.Find Longest Subarray/Solution.swift b/lcci/17.05.Find Longest Subarray/Solution.swift
new file mode 100644
index 0000000000000..63cd29b8675c9
--- /dev/null
+++ b/lcci/17.05.Find Longest Subarray/Solution.swift	
@@ -0,0 +1,20 @@
+class Solution {
+    func findLongestSubarray(_ array: [String]) -> [String] {
+        var vis: [Int: Int] = [0: -1]
+        var s = 0, mx = 0, k = 0
+        
+        for i in 0..<array.count {
+            s += array[i].first!.isLetter ? 1 : -1
+            if let j = vis[s] {
+                if mx < i - j {
+                    mx = i - j
+                    k = j + 1
+                }
+            } else {
+                vis[s] = i
+            }
+        }
+        
+        return Array(array[k..<(k + mx)])
+    }
+}