leetcode做题笔记10

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

输入:s = "aa", p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。

第一种思路:

利用递归不断匹配,若有不匹配地方输出false,验证此方法可行

bool isMatch(char * s, char * p){
    if (!*p) return !*s;
    if (*(p+1) == '*') {
        return isMatch(s, p+2) || (*s && (*s == *p || *p == '.') && isMatch(++s, p));
    }
    else {
        return *s && (*s == *p || *p == '.') && isMatch(++s, ++p);
    }
}

本题一开始想到直接判断是否为*,.这类特殊符号,若为特殊符号则进行特殊计算判断,后发现直接用递归的思路即可,对于'*'符号的计算,判断前一位与s的多个或零个是否匹配,对于'.'字符则直接匹配。最后实际编写的过程中需判断*s==*p或*p=='.'的情况。

问题:递归使用的内存空间较大,尚有优化的空间

收获:对递归的解法有了运用,熟悉了正则表达式

第二种思路:

动态规划

你可能感兴趣的:(leetcode,笔记,算法)