[leedcode 10] Regular Expression Matching
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) { //递归实现 注意终止条件:p的长度判断p==0;p==1;p>=2;三种 //当p大于1时,判断p[1]和'*'的关系,若!='*',正常比较s和p. substring(1) //若p[j+1]=='*',如果是p[j]==s[j],需要比较s[j]=p[j+2] or s[j+1]=p[j+2] or s[j+2]=p[j+2]... ;若p[j]!=s[j],s[j]=p[j+2] if(p.length()==0) return s.length()==0?true:false;//判断是否都为空,很有技巧 if(p.length()==1){ return s.length()==1&&(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.'); } if(p.charAt(1)!='*'){ if(s.length()==0)return false; if(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.') return isMatch(s.substring(1),p.substring(1)); else return false; }else{ while(s.length()>0&&(s.charAt(0)==p.charAt(0)||p.charAt(0)=='.')){ if(isMatch(s,p.substring(2))) return true; s=s.substring(1); } return isMatch(s,p.substring(2)); } } }