知识点:
IndexOutOfBoundsException - 如果 beginIndex 为负或大于此 String 对象的长度。
刚开始刷题的时候不理解,现在感觉上手dp了,重新来写一遍
Your input
“aab”
“a*b”
stdout
truefalsetruefalse
falsetruetruefalse
falsefalsetruefalse
falsefalsefalsetrue
Output
true
Expected
true
class Solution {
public boolean isMatch(String text, String pattern) {
//dp表示 ..i-1], ..j-1]的匹配情况
boolean[][] dp = new boolean[text.length() + 1][pattern.length() + 1];
//都为空的时候是匹配的
dp[0][0] = true;
//当text为空,pattern在*之前的都能匹配上
for (int i = 0; i < pattern.length(); i++) {
if (pattern.charAt(i) == '*' && dp[0][i-1]) {
dp[0][i+1] = true;
}
}
for (int i = 1; i <= text.length() ; i++){
for (int j = 1; j <= pattern.length(); j++){
if(pattern.charAt(j-1)==text.charAt(i-1)||pattern.charAt(j-1)=='.'){
dp[i][j]=dp[i-1][j-1];
}
if(pattern.charAt(j-1)=='*'){
dp[i][j]=dp[i][j-2]||
((text.charAt(i-1)==pattern.charAt(j-2)||pattern.charAt(j-2)=='.')&&dp[i-1][j]);
}
}
}
return dp[text.length()][pattern.length()];
}
}