LeetCode:請實現支持.和*的通配符模式匹配

題目:請實現支持’.‘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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章