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
solution里面的recursion的解法还好理解一点 加上了注释
class Solution {
public boolean isMatch(String text, String pattern) {
//匹配第一个字母
if (pattern.isEmpty()) return text.isEmpty();
boolean first_match = (!text.isEmpty() &&
(pattern.charAt(0) == text.charAt(0) || pattern.charAt(0) == '.'));
if (pattern.length() >= 2 && pattern.charAt(1) == '*’){
//1.忽略pattern中*及前面的字母
return (isMatch(text, pattern.substring(2)) ||
//2.使用*匹配 比如aaac a*c 之后将对比aac和a*c 也就是拿pattern中的a一直去匹配
(first_match && isMatch(text.substring(1), pattern)));
} else {
//没有* 正常匹配
return first_match && isMatch(text.substring(1), pattern.substring(1));
}
}
}