Skip to content

Commit 3bc64fc

Browse files
authored
Merge pull request #3727 from drxlx/0010-regular-expression-matching
Create 0010-regular-expression-matching.swift
2 parents 468d578 + 5182064 commit 3bc64fc

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
func isMatch(_ s: String, _ p: String) -> Bool {
3+
let s = Array(s), p = Array(p)
4+
var dp = [[Int]: Bool]()
5+
6+
func dfs(_ i: Int, _ j: Int) -> Bool {
7+
if dp[[i, j]] != nil {
8+
return dp[[i, j]]!
9+
}
10+
if i >= s.count && j >= p.count {
11+
return true
12+
}
13+
if j >= p.count {
14+
return false
15+
}
16+
let isMatch = i < s.count && (s[i] == p[j] || p[j] == ".")
17+
if j + 1 < p.count && p[j + 1] == "*" {
18+
dp[[i, j]] = dfs(i, j + 2) || (isMatch && dfs(i + 1, j))
19+
return dp[[i, j]]!
20+
}
21+
if isMatch {
22+
dp[[i, j]] = dfs(i + 1, j + 1)
23+
return dp[[i, j]]!
24+
}
25+
dp[[i, j]] = false
26+
return false
27+
}
28+
29+
return dfs(0, 0)
30+
}
31+
}

0 commit comments

Comments
 (0)