Leetcode第十题——正则表达式的匹配

1.思想:动态规划

   协助理解工具:https://alchemist-al.com/algorithms/regular-expression-matching

   步骤:

正则表达式匹配:
思想:动态规划
核心:pattern匹配string
将pattern放在横行,string放在竖行
如果不是特殊字符,则两者不匹配直接false,两者匹配则按照对角线向斜上方推移。
如果是特殊字符‘.’,则按照对角线斜上方推移。
如果是特殊字符'*',当前两格为普通数,则以前两格为准。当前两格是‘.’,则以本列正上方为准(另外,前两格是本行对应字符,也以本行正上方为准)。

 

代码:

class Solution {
    public boolean isMatch(String s, String p) {
        boolean[][] table= new boolean[s.length()+1][p.length()+1];
        table[0][0]=true;
        for(int col=1;col<table[0].length;col++){
            char ch=p.charAt(col-1);
            if(col>1){
                if(ch=='*'){
                    table[0][col]=table[0][col-2];
                }else{
                    table[0][col]=false;
                }


            }else{
                if(ch=='*') {


                    table[0][col] = true;

                }
            }
        }
        for(int row=1;row<table.length;row++){
            char ch1=s.charAt(row-1);
            for(int col=1;col<table[row].length;col++){
                char ch2=p.charAt(col-1);
                if(ch1==ch2||ch2=='.'){
                    table[row][col]=table[row-1][col-1];
                }else if (ch2=='*'){
                    if(col>1){
                        if(table[row][col-2]){
                            table[row][col]=true;
                        }else{
                            char prev=p.charAt(col-2);
                            if(prev==ch1||prev=='.'){
                                table[row][col]=table[row-1][col];
                            }
                        }
                    }
                }
            }
        }









        boolean lastRow[]=table[table.length-1];
        return lastRow[lastRow.length-1];
    }
}

    

 

posted @ 2020-08-29 11:39  huxiaojie  阅读(135)  评论(0编辑  收藏  举报