剑指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

}

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM