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];
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值