题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
示例1
输入
"aaa","a*a"返回值
true
思路:递归
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str String字符串
* @param pattern String字符串
* @return boolean布尔型
*/
public boolean matchCore(String str, String pattern){
if(str.length()!=0 && pattern.length()==0)
return false;
if(pattern.length()>=2 && pattern.charAt(1) == '*'){
if(str.length()==0) return matchCore(str, pattern.substring(2));/* *前面字符出现0次*/
if(pattern.charAt(0) == str.charAt(0) || (pattern.charAt(0) == '.')){
return matchCore(str.substring(1), pattern.substring(2)) || /* *前面字符出现1次*/
matchCore(str.substring(1), pattern) || /* *前面字符出现2次*/
matchCore(str, pattern.substring(2));/* *前面字符出现0次*/
}
else{
return matchCore(str, pattern.substring(2));
}
}
if(str.length()==0) return false;
if(pattern.charAt(0) == str.charAt(0) || pattern.charAt(0) == '.')
return matchCore(str.substring(1), pattern.substring(1));
return false;
}
public boolean match(String str, String pattern) {
// write code here
if(str.length() == 0 && pattern.length() == 0){
return true;
}
return matchCore(str, pattern);
}
}