Implement regular expression matching with support for ‘.’ and ‘*’.
‘.’ Matches any single character.
‘*’ Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
The function prototype should be:
bool isMatch(const char *s, const char *p)
Some examples:
isMatch(“aa”,”a”) → false
isMatch(“aa”,”aa”) → true
isMatch(“aaa”,”aa”) → false
isMatch(“aa”, “a*”) → true
isMatch(“aa”, “.*”) → true
isMatch(“ab”, “.*”) → true
isMatch(“aab”, “c*a*b”) → true
递归
public boolean isMatch(String s, String p) {
return helper(s, 0, p, 0);
}
private boolean helper(String s,int indexs,String p,int indexp){
int lens=s.length();
int lenp=p.length();
if(indexp==lenp){
if(indexs==lens)
return true;
return false;
}
if(indexs==lens){
if(indexp==lenp)
return true;
if(indexp<lenp-1&&p.charAt(indexp+1)=='*')
return helper(s, indexs, p, indexp+2);
return false;
}
if(s.charAt(indexs)==p.charAt(indexp)||p.charAt(indexp)=='.'){
if(indexp<lenp-1&&p.charAt(indexp+1)=='*')
return helper(s, indexs+1, p, indexp)||helper(s, indexs, p, indexp+2);
return helper(s, indexs+1, p, indexp+1);
}
if(indexp<lenp-1&&p.charAt(indexp+1)=='*')
return helper(s, indexs, p, indexp+2);
return false;
}