010正则表达式匹配

写在前面,太难了,目前还在思考,只是先把答案写出来,等后面想完了再补上思考过程

一、java代码

/*
 * @lc app=leetcode.cn id=10 lang=java
 *
 * [10] 正则表达式匹配
 */

// @lc code=start
class Solution {
    public boolean isMatch(String s, String p) {
        //S串长度
        //p串长度
        int m=s.length();
        int n=p.length();

        boolean[][]f=new boolean[m+1][n+1];
        f[0][0]=true;
        for(int i=0;i<=m;++i){
            for(int j=1;j<=n;++j){
                //判断p串后面是否有*号,*让p[j-2]重复0次
                if(p.charAt(j-1)=='*'){
                    f[i][j]=f[i][j-2];
                    //
                    if(matches(s,p,i,j-1)){
                        f[i][j]=f[i][j]||f[i-1][j];
                    }
                }
                else{
                    if(matches(s,p,i,j)){
                        f[i][j]=f[i-1][j-1];
                    }
                }
            }
        }
        return f[m][n];
    }
    
    public boolean matches(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);
    }
}
// @lc code=end



二、图解过程

2.1

2.2

2.3

2.4

2.5

2.6

2.7

posted @ 2020-08-09 18:36  阿狸狸爱吃饭  阅读(154)  评论(0编辑  收藏  举报