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
Post a Comment