dengxinyi преди 6 години
родител
ревизия
dfca39c947
променени са 1 файла, в които са добавени 24 реда и са изтрити 0 реда
  1. 24 0
      hard/10.regular-expression-matching.go

+ 24 - 0
hard/10.regular-expression-matching.go

@@ -0,0 +1,24 @@
+func isMatch(s string, p string) bool {
+	n, m := len(s), len(p)
+	dp := make([][]bool, n+1)
+	for i := range dp {
+		dp[i] = make([]bool, m+1)
+	}
+	dp[0][0] = true
+	// dp[i][0] = false, if i > 0
+	for i := 1; i <= m; i++ {
+		dp[0][i] = 1 < i && p[i-1] == '*' && dp[0][i-2]
+	}
+	// dp[i][j] = if p[j-1] == '*', dp[i][j-2] || ((p[j-2] == '.' || s[i-1] == p[j-2]) && dp[i-1][j])
+	//            else, (p[j-2] == '.' || s[i-1] == p[j-1]) && dp[i-1][j-1]
+	for i := 1; i <= n; i++ {
+		for j := 1; j <= m; j++ {
+			if p[j-1] == '*' {
+				dp[i][j] = dp[i][j-2] || ((p[j-2] == '.' || s[i-1] == p[j-2]) && dp[i-1][j])
+			} else {
+				dp[i][j] = (p[j-1] == '.' || s[i-1] == p[j-1]) && dp[i-1][j-1]
+			}
+		}
+	}
+	return dp[n][m]
+}