# 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()]; } } ```