---
# System prepended metadata

title: 0010. Regular Expression Matching
tags: [Leetcode, FaceBook, Dynamic Programming, Hard]

---

# 0010. Regular Expression Matching
###### tags: `Leetcode` `Hard` `FaceBook` `Dynamic Programming`
Link: https://leetcode.com/problems/regular-expression-matching/
## 思路
参考了[这里](https://leetcode.com/problems/regular-expression-matching/discuss/5651/Easy-DP-Java-Solution-with-detailed-Explanation)
写的非常全面了～分情况考虑即可
## Code
```java=
class Solution {
    public boolean isMatch(String s, String p) {
        if(s==null || p==null) return false;
        boolean[][] dp = new boolean[s.length()+1][p.length()+1];
        dp[0][0] = true;
        for(int i = 0;i < p.length();i++){
            if(p.charAt(i)=='*'&&dp[0][i-1]) dp[0][i+1] = true;
        }
        for(int i = 0;i < s.length();i++){
            for(int j = 0;j < p.length();j++){
                if(s.charAt(i)==p.charAt(j)){
                    dp[i+1][j+1] = dp[i][j];
                }
                if(p.charAt(j)=='.'){
                    dp[i+1][j+1] = dp[i][j];
                }
                if(p.charAt(j)=='*'){
                    if(s.charAt(i)!=p.charAt(j-1) && p.charAt(j-1)!='.'){
                        dp[i+1][j+1] = dp[i+1][j-1];
                    }
                    else{
                        dp[i+1][j+1] = dp[i+1][j]||dp[i][j+1]||dp[i+1][j-1];
                    }
                }
            }
        }
        return dp[s.length()][p.length()];
    }
}
```