/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
// 加上空串,0~n
boolean[][] dp = new boolean[str.length()+1][pattern.length()+1];
// 两个都是空串
dp[0][0] = true;
// 字符串为空,正则表达式不为空
for (int i = 2; i < dp[0].length; ++i){
// 正则表达式从下标0开始
if (pattern.charAt(i-1) == '*'){
// 从下标1开始
dp[0][i] = dp[0][i-2];
}
}
// 状态转移
for (int i = 1;i < dp.length;++i){
for (int j = 1;j < dp[0].length;++j){
if (pattern.charAt(j-1) != '*'){
if (pattern.charAt(j-1) == '.' ||
pattern.charAt(j-1) == str.charAt(i-1)){
dp[i][j] = dp[i-1][j-1];
}
}else if (j >= 2 && pattern.charAt(j - 1) == '*'){
// 对于包含 * 的匹配
// 当前一位为 '.', 或者字符相等,则匹配
if (pattern.charAt(j - 2) == '.' ||
pattern.charAt(j - 2) == str.charAt(i - 1)) {
dp[i][j] = dp[i][j - 2] ||
dp[i - 1][j - 2] ||
dp[i - 1][j];
} else {
// 否则只能不匹配
dp[i][j] = dp[i][j - 2];
}
}
}
}
return dp[str.length()][pattern.length()];
}