这涉及到C++转换成Java的一点小技巧。这样改就可以都通过了:
private boolean match(String s, int i, String p, int j) {
if (j == p.length()) return i == s.length();
if (j + 1 < p.length() && p.charAt(j + 1) == '*') {
// match(s+1, p) - match next char in s.
// match(s, p+2) - match exactly nothing in s.
if (i < s.length() && s.charAt(i) == p.charAt(j))
return match(s, i + 1, p, j) || match(s, i, p, j + 2);
else
return match(s, i, p, j + 2); // matches exactly nothing in
s.
} else if (j + 1 < p.length() && p.charAt(j + 1) == '+') {
// match(s+1, p) - match next char in s.
// match(s+1, p+2) - match exactly 1 char in s.
if (i < s.length() && s.charAt(i) == p.charAt(j))
return match(s, i + 1, p, j) || match(s, i + 1, p, j + 2);
else
return false;
} else if (i < s.length() && s.charAt(i) == p.charAt(j)) {
return match(s, i + 1, p, j + 1); // match exactly 1 char in s.
} else {
return false;
}
}