网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 811|回复: 0
打印 上一主题 下一主题

LeetCode真题-通配符匹配

[复制链接]

97

主题

98

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
跳转到指定楼层
楼主
发表于 2020-8-11 16:30:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目描述
请实现支持'.'and'*'.的通配符模式匹配
'.' 可以匹配任何单个字符。
'*' 可以匹配任何字符序列(包括空序列)。
匹配应该覆盖整个输入字符串(而不是部分)。
函数声明为:bool isMatch(const char *s, const char *p)
下面给出一些样例:
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "a*") → true
isMatch("aa", ".*") → true
isMatch("ab", ".*") → true
isMatch("aab", "c*a*b") → true
代码实现:
public class Solution {
    public boolean isMatch(String s, String p) {
        int len1=s.length();
        int len2=p.length();
        char[] s1=s.toCharArray();
        char[] p1=p.toCharArray();
        boolean[][] dp=new boolean[len1+1][len2+1];
        dp[0][0]=true;
        for(int i=1;i<=len2;i++)
            if(p1[i-1]=='*')
                dp[0][i]=dp[0][i-2];
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                if(p1[j-1]=='.'||p1[j-1]==s1[i-1]){
                    dp[i][j]=dp[i-1][j-1];
                }
                else if(p1[j-1]=='*'){
                    if(j!=1&&(p1[j-2]!='.'&&p1[j-2]!=s1[i-1]))
                        dp[i][j]=dp[i][j-2];
                        else
                            dp[i][j]=dp[i][j-2]||dp[i][j-1]||dp[i-1][j];
                    }
                }
            }
            return dp[len1][len2];
        }
    }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 15:54 , Processed in 0.033035 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表