标签:character function matching examples entire
‘.‘ 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
‘.‘ 匹配一个任意字符,‘*’前一个字符出现0次或者多次,A* 即“”,A, A* 三种情况,
解法:
s代表当前待匹配字符串指针,p代表当前待匹配模式的指针;
*p==‘\0‘ 即 模式已经到尾部,返回*s==‘\0‘ ,即返回字符串s是否已经到尾部
如果*p!=‘\0‘也即是模式没有达到末尾,这里要看p+1是否为’*‘
2.*(p+1)==‘*‘,
a.字符*p出现0次,即匹配(s,p+2),matchcore(s,p+2)
b.字符出现至少一次时,isequal(s,p)&&mathcore(s+1,p);
3.*(p=1)!=’*‘
查看当前字符是否匹配,如果不匹配,返回false,否则返回s+1,p+1的匹配结果
bool isequal(char ch,char ch1){
return ch==ch1||ch1==‘.‘&&ch!=‘\0‘;
}
bool matchcore(const char *s,const char* p){
if(*p==‘\0‘)
return *s==‘\0‘;
if(*(p+1)==‘*‘){
if(matchcore(s,p+2))
return true;
if(isequal(*s,*p)&&matchcore(s+1,p))
return true;
}
else{
if(isequal(*s,*p))
return matchcore(s+1,p+1);
return false;
}
}
bool isMatch(string s, string p) {
if(p==".*")
return true;
int lena=s.length();
int lenb=p.length();
return matchcore(s.c_str(),p.c_str());
}
方法2 DP
标签:character function matching examples entire
原文地址:http://searchcoding.blog.51cto.com/1335412/1693716