正则表达式匹配

题目描述

请实现一个函数用来匹配包括‘.‘和‘*‘的正则表达式。模式中的字符‘.‘表示任意一个字符,而‘*‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
 
public class Solution {
    public boolean match(char[] str, char[] pattern)
    {
        int m = str.length, n = pattern.length;
        boolean [][] dp = new boolean[n + 1][m + 1];
        dp[0][0] = true;
        for (int i = 1; i <= n; ++i) {
            for (int j = 0; j <= m; ++j) {
                if (pattern[i - 1] == ‘*‘) {
                    if (dp[i - 2][j]) dp[i][j] = true;
                    if (j > 0 && 
                        (pattern[i - 2] == ‘.‘ || str[j - 1] == pattern[i - 2])
                        && (dp[i - 2][j - 1] || dp[i][j - 1]))
                        dp[i][j] = true;
                } else {
                    if (j != 0) {
                        if ((pattern[i - 1] == ‘.‘ || pattern[i - 1] == str[j - 1])
                           && dp[i - 1][j - 1])
                            dp[i][j] = true;
                    }
                }
            }
        }
        return dp[n][m];
    }
}

相关推荐