加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

leetcode 正则表达式匹配

发布时间:2020-12-14 06:08:28 所属栏目:百科 来源:网络整理
导读:问题: 请实现一个函数用来匹配包括‘.‘和‘*‘的正则表达式。模式中的字符‘.‘表示任意一个字符,而‘*‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,

问题:

请实现一个函数用来匹配包括‘.‘和‘*‘的正则表达式。模式中的字符‘.‘表示任意一个字符,而‘*‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配

?

思路:

如果 pattern[j] == str[i] || pattern[j] == ‘.‘,此时dp[i][j] = dp[i-1][j-1];

如果 pattern[j] == ‘*‘
? ? 分两种情况:
? ? 1: 如果pattern[j-1] != str[i] && pattern[j-1] != ‘.‘,此时dp[i][j] = dp[i][j-2] //a*匹配0次
? ? 2: 如果pattern[j-1] == str[i] || pattern[j-1] == ‘.‘
? ? ? ? 此时dp[i][j] = dp[i][j-2] // a*匹配0次
????? ? 或者 dp[i][j] = dp[i][j-1] // a*匹配1次
????? ? 或者 dp[i][j] = dp[i-1][j] // a*匹配多次
 public boolean match(char[] str,char[] pattern)
    {
        ?if(str == null || pattern == null)? return true;boolean [][] dp = new boolean[str.length+1][pattern.length+1];
        dp[0][0] = true;
        for(int i=1; i<dp[0].length;i++){
             if(pattern[i-1] == ‘*‘){
                 dp[0][i] = dp[0][i-2];
             }
        }
        for(int i=1; i<dp.length; i++){
            for(int j=1;j<dp[0].length; j++){
                if(pattern[j-1] == ‘*‘){
                    if(str[i-1] == pattern[j-2] || pattern[j-2] == ‘.‘){
                        dp[i][j] = dp[i][j-2] || dp[i-1][j] || dp[i][j-1];
                        // 0  多次  一次
                    }
                    else{
                        dp[i][j] = dp[i][j-2];
                    }
                }
                else if(str[i-1] == pattern[j-1] || pattern[j-1] == ‘.‘){
                        dp[i][j] = dp[i-1][j-1];
                }
            }
        }

        for(int i=0; i<dp.length; i++){
            for(int j=0; j<dp[0].length; j++){
                System.out.print(dp[i][j] + " ");
            }
            System.out.println();
        }
        return dp[dp.length-1][dp[0].length-1];
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读