dengxinyi 6 years ago
parent
commit
0d4acae654
2 changed files with 27 additions and 7 deletions
  1. 7 7
      hard/10.regular-expression-matching.go
  2. 20 0
      hard/10.regular-expression-matching.java

+ 7 - 7
hard/10.regular-expression-matching.go

@@ -1,18 +1,18 @@
 func isMatch(s string, p string) bool {
-	n, m := len(s), len(p)
-	dp := make([][]bool, n+1)
+	m, n := len(s), len(p)
+	dp := make([][]bool, m+1)
 	for i := range dp {
-		dp[i] = make([]bool, m+1)
+		dp[i] = make([]bool, n+1)
 	}
 	dp[0][0] = true
 	// dp[i][0] = false, if i > 0
-	for i := 1; i <= m; i++ {
+	for i := 1; i <= n; 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++ {
+	for i := 1; i <= m; i++ {
+		for j := 1; j <= n; 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 {
@@ -20,5 +20,5 @@ func isMatch(s string, p string) bool {
 			}
 		}
 	}
-	return dp[n][m]
+	return dp[m][n]
 }

+ 20 - 0
hard/10.regular-expression-matching.java

@@ -0,0 +1,20 @@
+class Solution {
+    public boolean isMatch(String s, String p) {
+        char[] str = s.toCharArray(), pat = p.toCharArray();
+        boolean[][] dp = new boolean[str.length + 1][pat.length + 1];
+        dp[0][0] = true;
+        // dp[i][0] = false, 0 < i
+        for (int i = 1; i <= pat.length; i++)
+            dp[0][i] = 1 < i && pat[i - 1] == '*' && dp[0][i - 2];
+        for (int i = 1; i <= str.length; i++) {
+            for (int j = 1; j <= pat.length; j++) {
+                if (pat[j - 1] == '*') {
+                    dp[i][j] = dp[i][j - 2] || ((pat[j - 2] == '.' || str[i - 1] == pat[j - 2]) && dp[i - 1][j]);
+                } else {
+                    dp[i][j] = (pat[j - 1] == '.' || str[i - 1] == pat[j - 1]) && dp[i - 1][j - 1];
+                }
+            }
+        }
+        return dp[str.length][pat.length];
+    }
+}