邓心一 6 years ago
parent
commit
e601426040
1 changed files with 21 additions and 0 deletions
  1. 21 0
      hard/44.wildcard-matching.java

+ 21 - 0
hard/44.wildcard-matching.java

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