美文网首页
10.正则表达式匹配

10.正则表达式匹配

作者: 李伟13 | 来源:发表于2020-09-06 23:05 被阅读0次

    1.字符串为传递参数的递归法
    2.指针为传递参数的递归法
    3.记忆化递归法
    4.动态规划



    3.记忆化递归代码

    class Solution {
    public:
        vector<vector<int> > memo;
        char *str, *ptr;
        int slen, plen;
        bool isMatch(string s, string p) {
            slen = s.size();
            plen = p.size();
            str = &s[0];
            ptr = &p[0];
            memo.resize(slen + 1);
            for (int k = 0; k <= slen; ++k)
            {
                memo[k].resize(plen + 1, 3);
            }
            reverse(s.begin(), s.end());
            reverse(p.begin(), p.end());
            return Match(0, 0);
        }
        bool Match(int i, int j) {
            if(i == slen && j == plen) {
                memo[i][j] = 1;
                return true;
            }
            if (i == slen && j != plen) {
                if (*(ptr + j) != '*') {
                    memo[i][j] = 0;
                    return false;
                }
                if (*(ptr + j) == '*') {
                    if (memo[i][j + 2] == 3) memo[i][j + 2] = (Match(i, j + 2) ? 1 : 0);
                    return memo[i][j + 2];
                }
            }
            if(i != slen&& j == plen) {
                memo[i][j] = 0;
                return false;
            }
            if (*(str + i) == *(ptr + j) || *(ptr + j) == '.') {
                if (memo[i + 1][j + 1] == 3) memo[i + 1][j + 1] = Match(i + 1, j + 1) ? 1 : 0;
                    return memo[i + 1][j + 1];
            }
            if (*(ptr + j) == '*') {
                if (*(ptr + j + 1) == *(str + i) || *(ptr + j + 1) == '.') {
                    if (memo[i + 1][j] == 3) memo[i + 1][j] = (Match(i + 1, j) ? 1 : 0);
                    if (memo[i][j + 2] == 3) memo[i][j + 2] = (Match(i, j + 2) ? 1 : 0);
                    return memo[i + 1][j] || memo[i][j + 2];
                }
                if (*(ptr + j + 1) != *(str + i)) {
                    if (memo[i][j + 2] == 3) memo[i][j + 2] = (Match(i, j + 2) ? 1 : 0);
                    return memo[i][j + 2];
                }
            }
            return false;
        }
    };
    

    相关文章

      网友评论

          本文标题:10.正则表达式匹配

          本文链接:https://www.haomeiwen.com/subject/mbwcektx.html