10. 正则表达式匹配(动态规划)

 

   

class Solution {
    public boolean isMatch(String s, String p) {
        int m = s.length(), n = p.length();
        char[] arrs = s.toCharArray();
        char[] arrp = p.toCharArray();
        boolean[][] dp = new boolean[m+1][n+1];
        dp[0][0] = true;  // 初始化
        for(int i = 2; i <= n; i++) {  // '*' 匹配零个或多个前面的那((一个)注意是一个)元素
            if(arrp[i-1] == '*' && dp[0][i-2]) dp[0][i] = true;
        }
        for(int i = 1; i <= m; i++) {
            for(int j = 1; j <= n; j++) {
                if(arrp[j-1] == '.' || arrp[j-1] == arrs[i-1]) {
                    dp[i][j] = dp[i-1][j-1];
                } else if (arrp[j-1] == '*') {
                    if(dp[i][j-2]) { // *匹配0个;
                        dp[i][j] = true;
                    } else if(arrp[j-2] == arrs[i-1] || arrp[j-2] == '.') {
                        dp[i][j] = dp[i-1][j]; // *匹配多个
                    }
                }
            }
        }
        return dp[m][n];
    }
}

 

posted @ 2020-07-08 20:38  Sexyomaru  阅读(319)  评论(0编辑  收藏  举报