44.wildcard-matching.java 875 B

123456789101112131415161718192021
  1. class Solution {
  2. public boolean isMatch(String s, String p) {
  3. char[] chs = s.toCharArray();
  4. char[] chp = p.toCharArray();
  5. boolean[][] dp = new boolean[chs.length + 1][chp.length + 1];
  6. dp[0][0] = true;
  7. for (int i = 1; i <= chp.length && chp[i - 1] == '*'; i++)
  8. dp[0][i] = true;
  9. // dp[i][j] = dp[i-1][j-1], if chs[i-1] == chp[j-1] or chp[j-1] == '?'
  10. // = dp[i-1][j] || dp[i][j-1], if chp[j-1] == '*'
  11. for (int i = 1; i <= chs.length; i++) {
  12. for (int j = 1; j <= chp.length; j++) {
  13. if (chp[j - 1] == '*')
  14. dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
  15. else if (chp[j - 1] == '?' || chs[i - 1] == chp[j - 1])
  16. dp[i][j] = dp[i - 1][j - 1];
  17. }
  18. }
  19. return dp[chs.length][chp.length];
  20. }
  21. }