1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public class Solution { public boolean match (String str, String pattern) { int m = str.length(), n = pattern.length(); boolean[][] dp = new boolean[m + 1][n + 1]; dp[0][0] = true; for(int i = 0; i <= m; i++){ for(int j = 1; j <= n; j++){ if(pattern.charAt(j - 1) != '*'){ if(i > 0 && (str.charAt(i - 1) == pattern.charAt(j - 1) || pattern.charAt(j - 1) == '.')){ dp[i][j] = dp[i - 1][j - 1]; } }else{ boolean dp1 = false; boolean dp2 = false; if(j >= 2){ dp1 = dp[i][j - 2]; } if(i > 0 && j >= 2 && (str.charAt(i - 1) == pattern.charAt(j - 2) || pattern.charAt(j - 2) == '.')){ dp2 = dp[i - 1][j]; } dp[i][j] = dp1 || dp2; } } } return dp[m][n]; } }
|