posts - 501,comments - 0,views - 23802

20230126 磕磕绊绊默写完
20230127 顺利写完
20230129 有点小磕但是顺利写完
20230201 顺利写完
20230209 顺利写完
20230224 顺利写完
20230506 全部忘掉
20230508 顺利通过

lambda表达式
[捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 { // 函数体 }
所谓捕获列表,其实可以理解为参数的一种类型,lambda 表达式内部函数体在默认情况下是不能够使用函数体外部的变量的,这时候捕获列表可以起到传递外部数据的作用。
[&] Capture any referenced variable by reference


原题解

题目

约束

解法

dp五部曲:
1.状态定义
2.状态转移
3.初始化
4.遍历顺序
5.返回形式

class Solution {
public:
    bool isMatch(string s, string p) {
        int m = s.size();
        int n = p.size();

        auto matches = [&](int i, int j) {//判断两个字符是否匹配
            if (i == 0) {//因为要在这里找到真正的下标,所以i==0时没法-1直接返回
                return false;
            }
            if (p[j - 1] == '.') {
                return true;
            }
            return s[i - 1] == p[j - 1];//下标-1在这里实现的
        };
        //状态转移方程为s第i位之前与p第j位之前匹不匹配
        vector<vector<int>> f(m + 1, vector<int>(n + 1));//天然为false
        f[0][0] = true;//f[0][1~n-1]都为false
        for (int i = 0; i <= m; ++i) {//这里的ij代表字符串长度,真正的下标要-1
            for (int j = 1; j <= n; ++j) {
                if (p[j - 1] == '*') {//s p 都要-1才能对应下标
                    f[i][j] |= f[i][j - 2];
                    if (matches(i, j - 1)) {
                        f[i][j] |= f[i - 1][j];
                    }
                }
                else {
                    if (matches(i, j)) {
                        f[i][j] |= f[i - 1][j - 1];
                    }
                }
            }
        }
        return f[m][n];
    }
};
posted on   垂序葎草  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示