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;
    }
};

你可能感兴趣的:(C++编程练习,leetcode,正则表达式,字符串)