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


浙公网安备 33010602011771号