Leetcode wild card matching

来源:互联网 发布:mac 如何装office 免费 编辑:程序博客网 时间:2024/05/16 18:14
public class Solution {    private int[][] dp;        public boolean isMatch(String s, String p) {        if (s == null || p == null) {            return false;        }                dp = new int[s.length()][p.length()];                return isMatchHelper(s, 0, p, 0);    }        private boolean isMatchHelper(String s, int indexS, String p, int indexP) {        if (indexP >= p.length() || indexS >= s.length()) {            return (indexP >= p.length() && indexS >= s.length());        }                if (dp[indexS][indexP] == -1) {            return false;        } else if (dp[indexS][indexP] == 1) {            return true;        }                char cp = p.charAt(indexP);        boolean res = false;        if (cp == '?') {            // Match '?'            res = isMatchHelper(s, indexS + 1, p, indexP + 1);        } else if (cp == '*') {            // Match '*'            for (int i = indexS; i <= s.length(); i++) {                boolean cur = isMatchHelper(s, i, p, indexP + 1);                if (cur == true) {                    res = true;                    break;                }            }        } else {            // Match regular char            if (cp == s.charAt(indexS)) {                res = isMatchHelper(s, indexS + 1, p, indexP + 1);            }        }                if (res == true) {            dp[indexS][indexP] = 1;        } else {            dp[indexS][indexP] = -1;        }                return res;    }        }


在 recursion 的基础上加了 二维 DP 数组来储存之前的计算结果。

不过 leetcode 最后一个大集合还是过不去。

0 0