File tree Expand file tree Collapse file tree 2 files changed +85
-0
lines changed
lcof2/剑指 Offer II 096. 字符串交织 Expand file tree Collapse file tree 2 files changed +85
-0
lines changed Original file line number Diff line number Diff line change @@ -290,6 +290,51 @@ public class Solution {
290
290
}
291
291
```
292
292
293
+ #### Swift
294
+
295
+ ``` swift
296
+ class Solution {
297
+ private var memo = [String : Bool ]()
298
+ private var s1: [Character ] = []
299
+ private var s2: [Character ] = []
300
+ private var s3: [Character ] = []
301
+ private var m = 0
302
+ private var n = 0
303
+
304
+ func isInterleave (_ s1 : String , _ s2 : String , _ s3 : String ) -> Bool {
305
+ m = s1.count
306
+ n = s2.count
307
+ if m + n != s3.count {
308
+ return false
309
+ }
310
+ self .s1 = Array (s1)
311
+ self .s2 = Array (s2)
312
+ self .s3 = Array (s3)
313
+ return dfs (0 , 0 )
314
+ }
315
+
316
+ private func dfs (_ i : Int , _ j : Int ) -> Bool {
317
+ if i >= m && j >= n {
318
+ return true
319
+ }
320
+ let key = " \( i ) ,\( j ) "
321
+ if let cached = memo[key] {
322
+ return cached
323
+ }
324
+ let k = i + j
325
+ var ans = false
326
+ if i < m && s1[i] == s3[k] && dfs (i + 1 , j) {
327
+ ans = true
328
+ }
329
+ if ! ans && j < n && s2[j] == s3[k] && dfs (i, j + 1 ) {
330
+ ans = true
331
+ }
332
+ memo[key] = ans
333
+ return ans
334
+ }
335
+ }
336
+ ```
337
+
293
338
<!-- tabs: end -->
294
339
295
340
<!-- solution: end -->
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ private var memo = [ String: Bool] ( )
3
+ private var s1 : [ Character ] = [ ]
4
+ private var s2 : [ Character ] = [ ]
5
+ private var s3 : [ Character ] = [ ]
6
+ private var m = 0
7
+ private var n = 0
8
+
9
+ func isInterleave( _ s1: String , _ s2: String , _ s3: String ) -> Bool {
10
+ m = s1. count
11
+ n = s2. count
12
+ if m + n != s3. count {
13
+ return false
14
+ }
15
+ self . s1 = Array ( s1)
16
+ self . s2 = Array ( s2)
17
+ self . s3 = Array ( s3)
18
+ return dfs ( 0 , 0 )
19
+ }
20
+
21
+ private func dfs( _ i: Int , _ j: Int ) -> Bool {
22
+ if i >= m && j >= n {
23
+ return true
24
+ }
25
+ let key = " \( i) , \( j) "
26
+ if let cached = memo [ key] {
27
+ return cached
28
+ }
29
+ let k = i + j
30
+ var ans = false
31
+ if i < m && s1 [ i] == s3 [ k] && dfs ( i + 1 , j) {
32
+ ans = true
33
+ }
34
+ if !ans && j < n && s2 [ j] == s3 [ k] && dfs ( i, j + 1 ) {
35
+ ans = true
36
+ }
37
+ memo [ key] = ans
38
+ return ans
39
+ }
40
+ }
You can’t perform that action at this time.
0 commit comments