Java
class Solution {
public boolean isMatch(String s, String p) {
if(p.isEmpty()) return s.isEmpty();
//首字母是否匹配
boolean first_match=!s.isEmpty()&&(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.');
// *号我们分两种情况讨论
//1、匹配0个字符,此时我们直接砍掉p的前两个字符然后继续进行比较
//2、匹配1个或多个字符,在首字母匹配的情况下,我们砍掉s的第一个字符然后继续进行比较
if(p.length()>=2&&p.charAt(1)=='*'){
return isMatch(s,p.substring(2))||(first_match&&isMatch(s.substring(1),p));
}
//正常情况,直接一个一个比较
return first_match&&isMatch(s.substring(1),p.substring(1));
}
}