10 - Regular Expression Matching

 JAVA

  • class Solution {
        public boolean isMatch(String s, String p) {
            int m = s.length(), 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) {
                    if (p.charAt(j - 1) == '*') {
                        f[i][j] = f[i][j - 2];
                        if (i > 0 && (p.charAt(j - 2) == '.' || p.charAt(j - 2) == s.charAt(i - 1))) {
                            f[i][j] |= f[i - 1][j];
                        }
                    } else if (i > 0
                        && (p.charAt(j - 1) == '.' || p.charAt(j - 1) == s.charAt(i - 1))) {
                        f[i][j] = f[i - 1][j - 1];
                    }
                }
            }
            return f[m][n];
        }
    }
C++

  • class Solution {
    public:
        bool isMatch(string s, string p) {
            int m = s.size(), n = p.size();
            bool f[m + 1][n + 1];
            memset(f, false, sizeof f);
            f[0][0] = true;
            for (int i = 0; i <= m; ++i) {
                for (int j = 1; j <= n; ++j) {
                    if (p[j - 1] == '*') {
                        f[i][j] = f[i][j - 2];
                        if (i && (p[j - 2] == '.' || p[j - 2] == s[i - 1])) {
                            f[i][j] |= f[i - 1][j];
                        }
                    } else if (i && (p[j - 1] == '.' || p[j - 1] == s[i - 1])) {
                        f[i][j] = f[i - 1][j - 1];
                    }
                }
            }
            return f[m][n];
        }
    };

Comments