题目描述
请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
public class Solution {
public boolean match(char[] str, char[] pattern) {
if(str == null || pattern == null) {
return false;
}
if(str != null && pattern == null) {
return false;
}
return matchCore(str, 0, pattern, 0);
}
private boolean matchCore(char[] str, int i, char[] pattern, int j) {
if(i == str.length && j == pattern.length) {
return true;
}
if(i < str.length && j == pattern.length) {
return false;
}
if(j + 1 < pattern.length && pattern[j + 1] == '*') {
if(i == str.length) {
return matchCore(str, i, pattern, j + 2);
}else {
if(str[i] == pattern[j] || pattern[j] == '.') {
return matchCore(str, i, pattern, j + 2) || matchCore(str, i + 1, pattern, j) ||matchCore(str, i + 1, pattern, j + 2);
}else {
return matchCore(str, i , pattern, j + 2);
}
}
}
if(i == str.length && j < pattern.length)
return false;
if(pattern[j] == str[i] || pattern[j] == '.') {
return matchCore(str, i + 1, pattern, j + 1);
}
return false;
}
}