LeetCode—通配符匹配(DP)

通配符匹配(困难)

2020年7月5日

题目来源:力扣

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题

困难的我果然还是做不到,本题参考甜姨的题解,在此基础上,把两个字符数组先进行转换,不采用charAt(),速度从36ms提高到了17ms。

class Solution {
    public boolean isMatch(String s, String p) {
        int slen=s.length();
        int plen=p.length();
        char[] sarray=s.toCharArray();
        char[] parray=p.toCharArray();
        //建立二维数组
        boolean[][] dp=new boolean[plen+1][slen+1];
        //处理p前面有多个*的情况
        dp[0][0]=true;
        for(int i=1;i<=plen;i++){
            if(parray[i-1]!='*')
                break;
            dp[i][0]=true;
        }

        //开始循环dp,用p做外圈,因为可能有*可以匹配任意字符串
        for(int i=1;i<=plen;i++){
            for(int j=1;j<=slen;j++){
                //如果p的字符等于?或者与s相等
                if(parray[i-1]==sarray[j-1] ||parray[i-1]=='?')
                    dp[i][j]=dp[i-1][j-1];
                //如果p的字符等于*,有两种情况,第一种是p匹配了空字符,第二种是p匹配了s字符串
                else if(parray[i-1]=='*')
                    dp[i][j]=dp[i-1][j] | dp[i][j-1];
            }
        }
        return dp[plen][slen];
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41541562/article/details/107139968