1. 程式人生 > 實用技巧 >010正則表示式匹配

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