題目:請實現支持’.‘and’’.的通配符模式匹配
‘.’ 可以匹配任何單個字符。’’ 可以匹配任何字符序列(包括空序列)。匹配應該覆蓋整個輸入字符串(而不是部分)。
函數聲明爲:↵bool isMatch(const char *s, const char p)
整體思路:
如果下一個字符爲 * ( 前面的字符可以出現0次,1次,無數次):
1.當 * 前面的字符 匹配了0個字符時,s不變,p向後移動兩位
isMatch(s,p+2)
2.當 * 前面的字符匹配了1個或一串相同字符時,s向後移動一位,p不變(1個字符和一串相同的字符本質都是一個意思)
isMatch(s+1,p)
如果下一個字符不爲 *
如果匹配成功,就下一個字符;不成功則直接返回false,除了p的該字符爲 . 時,且s!=’\0’
最終代碼(使用了遞歸的算法)
class Solution {
public:
bool isMatch(const char *s, const char *p) {
if(s==NULL||p==NULL)
return false;
if(*s=='\0'&&*p=='\0')
return true;
if(*s!='\0'&&*p=='\0')
return false;
if(*(p+1)=='*')
{
if(*s==*p||*p=='.'&&*s!='\0')
return isMatch(s+1,p)||isMatch(s,p+2);
else
return isMatch(s,p+2);
}
if(*s==*p||*p=='.'&&*s!='\0')
return isMatch(s+1,p+1);
return false;
}
};