Skip to content

Commit

Permalink
feat: add swift implementation to lcof2 problem: No.096
Browse files Browse the repository at this point in the history
  • Loading branch information
klever34 committed Sep 3, 2024
1 parent 1fdf6c1 commit 36bf88f
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
45 changes: 45 additions & 0 deletions lcof2/剑指 Offer II 096. 字符串交织/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,51 @@ public class Solution {
}
```

#### Swift

```swift
class Solution {
private var memo = [String: Bool]()
private var s1: [Character] = []
private var s2: [Character] = []
private var s3: [Character] = []
private var m = 0
private var n = 0

func isInterleave(_ s1: String, _ s2: String, _ s3: String) -> Bool {
m = s1.count
n = s2.count
if m + n != s3.count {
return false
}
self.s1 = Array(s1)
self.s2 = Array(s2)
self.s3 = Array(s3)
return dfs(0, 0)
}

private func dfs(_ i: Int, _ j: Int) -> Bool {
if i >= m && j >= n {
return true
}
let key = "\(i),\(j)"
if let cached = memo[key] {
return cached
}
let k = i + j
var ans = false
if i < m && s1[i] == s3[k] && dfs(i + 1, j) {
ans = true
}
if !ans && j < n && s2[j] == s3[k] && dfs(i, j + 1) {
ans = true
}
memo[key] = ans
return ans
}
}
```

<!-- tabs:end -->

<!-- solution:end -->
Expand Down
40 changes: 40 additions & 0 deletions lcof2/剑指 Offer II 096. 字符串交织/Solution.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
class Solution {
private var memo = [String: Bool]()
private var s1: [Character] = []
private var s2: [Character] = []
private var s3: [Character] = []
private var m = 0
private var n = 0

func isInterleave(_ s1: String, _ s2: String, _ s3: String) -> Bool {
m = s1.count
n = s2.count
if m + n != s3.count {
return false
}
self.s1 = Array(s1)
self.s2 = Array(s2)
self.s3 = Array(s3)
return dfs(0, 0)
}

private func dfs(_ i: Int, _ j: Int) -> Bool {
if i >= m && j >= n {
return true
}
let key = "\(i),\(j)"
if let cached = memo[key] {
return cached
}
let k = i + j
var ans = false
if i < m && s1[i] == s3[k] && dfs(i + 1, j) {
ans = true
}
if !ans && j < n && s2[j] == s3[k] && dfs(i, j + 1) {
ans = true
}
memo[key] = ans
return ans
}
}

0 comments on commit 36bf88f

Please sign in to comment.