剑指Offer(Java版)第五十八题:请实现一个函数用来匹配包括'.'和'*'的正则表达式。 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配, 但是与"aa.a"和"ab*a"均不匹配

/*
请实现一个函数用来匹配包括'.'和'*'的正则表达式。
模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,
但是与"aa.a"和"ab*a"均不匹配
*/
public class Class58 {

public boolean match(char[] str, char[] pattern){
if(str == null || pattern == null){
return false;
}
return matchMain(str, 0, pattern, 0);
}
public boolean matchMain(char[] str, int i, char[] pattern, int j){
if(j == pattern.length){
return i == str.length;
}
if(j < pattern.length - 1 && pattern[j + 1] == '*'){
if(i != str.length && (str[i] == pattern[j] || pattern[j] == '.')){
return matchMain(str, i, pattern, j + 2) || matchMain(str, i + 1, pattern, j) || matchMain(str, i + 1, pattern, j + 2);
}else{
return matchMain(str, i, pattern, j + 2);
}
}
if(i != str.length && (str[i] == pattern[j]) || pattern[j] == '.'){
return matchMain(str, i + 1, pattern, j + 1);
}
return false;
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

posted on 2020-03-22 15:49  桌子哥  阅读(951)  评论(0编辑  收藏  举报