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 class Solution {
public boolean isMatch(String s, String p) {
return func(s, p, s.length() - 1, p.length() - 1);
}
public boolean func(String s, String p, int i1, int i2){
if(i1 == -1 && i2 == -1){
return true;
}
else if(((i1 < 0 && p.charAt(i2)!='*') || i2 < 0)){
return false;
}
if(p.charAt(i2) == '.'){
return func(s, p, i1 - 1, i2 -1);
}
else if(p.charAt(i2) == '*'){
i2--;
while(true){
if(func(s, p, i1, i2 - 1)){
return true;
}
if(i1 < 0 || (s.charAt(i1) != p.charAt(i2) && p.charAt(i2) != '.')){
break;
}
i1--;
}
}
else{
return (s.charAt(i1) == p.charAt(i2)) && func(s, p, i1-1, i2-1);
}
return false;
}
}
No comments:
Post a Comment