1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| class Solution {
Boolean[][] memo; public boolean isMatch(String s, String p) { memo = new Boolean[s.length() + 1][p.length() + 1]; return isMatch(s.toCharArray(), 0, p.toCharArray(), 0); } private boolean isMatch(char[] ss, int i, char[] ps, int j) { if(memo[i][j] != null) return memo[i][j]; boolean result = false; if(j == ps.length) { result = (i == ss.length); } else { boolean firstMatch = i != ss.length && (ss[i] == ps[j] || ps[j] == '?'); if(ps[j] == '*') { result = (i != ss.length && isMatch(ss, i + 1, ps, j)) || isMatch(ss, i, ps, j + 1); } else { result = firstMatch && isMatch(ss, i + 1, ps, j + 1); } } memo[i][j] = result; return result; }
public boolean isMatch(String text, String pattern) { boolean[][] dp = new boolean[text.length() + 1][pattern.length() + 1]; dp[text.length()][pattern.length()] = true;
for (int i = text.length(); i >= 0; i--) { for (int j = pattern.length(); j >= 0; j--) { if (i == text.length() && j == pattern.length()) continue; boolean first_match = (i < text.length() && j < pattern.length() && (pattern.charAt(j) == text.charAt(i) || pattern.charAt(j) == '?' || pattern.charAt(j) == '*')); if (j < pattern.length() && pattern.charAt(j) == '*') { dp[i][j] = dp[i][j + 1] || first_match && dp[i + 1][j]; } else { dp[i][j] = first_match && dp[i + 1][j + 1]; } } } return dp[0][0]; }
boolean isMatch(String str, String pattern) { int s = 0, p = 0, match = 0, starIdx = -1; while (s < str.length()){ if (p < pattern.length() && (pattern.charAt(p) == '?' || str.charAt(s) == pattern.charAt(p))){ s++; p++; } else if (p < pattern.length() && pattern.charAt(p) == '*'){ starIdx = p; match = s; p++; } else if (starIdx != -1){ p = starIdx + 1; match++; s = match; } else return false; } while (p < pattern.length() && pattern.charAt(p) == '*') p++;
return p == pattern.length(); }
}
|