2021-03-13(10. 正则表达式匹配)

class Solution {
     
    public boolean isMatch(String s, String p) {
     
        boolean[][] dp=new boolean[s.length()+1][p.length()+1];
        dp[0][0]=true;
        for(int i=0;i<=s.length();i++){
     
            for(int j=1;j<=p.length();j++){
     
                if(p.charAt(j-1)=='*'){
     
                    dp[i][j]=dp[i][j-2];
                    if(match(s,p,i,j-1)){
     
                        dp[i][j]=dp[i-1][j]||dp[i][j];
                    }
                }else{
     
                    if(match(s,p,i,j)){
     
                        dp[i][j]=dp[i-1][j-1];
                    }
                }
            }
        }
        return dp[s.length()][p.length()];
    }
    boolean match(String s, String p,int i,int j){
     
        if(i==0){
     
            return false;
        }
        if(p.charAt(j-1)=='.'){
     
            return true;
        }
        return s.charAt(i-1)==p.charAt(j-1);
    } 

}

你可能感兴趣的:(数据结构与算法)