转载:
大佬们的题解链接:[link]https://leetcode-cn.com/problems/regular-expression-matching/solution/dong-tai-gui-hua-zen-yao-cong-0kai-shi-si-kao-da-b/
代码:
class Solution {
public boolean isMatch(String s, String p) {
if(s == null && p == null) return false;
int m = s.length(), n = p.length();
//dp[i][j]表示s的前i个能被p的前j个匹配
boolean[][] dp = new boolean[m+1][n+1];
dp[0][0] = true;
/*
如果s为空字符串,则只有当p为"#*#*#*#*"这种形式
才能匹配成功, 即这种p为空字符串的匹配。
*/
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) || p.charAt(j) == '.'){
dp[i+1][j+1] = dp[i][j];
}
if(p.charAt(j) == '*' ) {
if (p.charAt(j-1) != s.charAt(i) && p.charAt(j-1) != '.') {
dp[i+1][j+1] = dp[i+1][j-1];
}
else{
dp[i+1][j+1] = (dp[i][j+1] || dp[i+1][j] || dp[i+1][j-1]);
}
}
}
}
return dp[m][n];
}
}
public class test{
public static void main(String args[]){
Solution solution = new Solution();
System.out.println(solution.isMatch("a",".*..a*"));
}
}