[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)); } } }
                    
                
                
            
        
浙公网安备 33010602011771号