1. 题目10 正则表达式匹配
字符串p表示的是pattern,其中f[i][j]->s的前i个字符与p中的前j个字符能否进行匹配。
if p[j] is lowercase():
else if p[j] == ‘*’:
f
(
i
,
j
)
=
f
(
i
,
j
−
2
)
∣
∣
f
(
i
−
1
,
j
)
&
&
p
[
j
−
1
]
匹
配
s
[
i
]
f(i, j)=f(i, j-2)|| f(i-1, j) \ \&\&\ p[j-1]匹配s[i]
f(i,j)=f(i,j−2)∣∣f(i−1,j) && p[j−1]匹配s[i]
class Solution {
public:
bool isMatch(string s, string p) {
int m = s.size(), n = p.size();
s = ' ' + s;
p = ' ' + p;
vector<vector<bool>> dp(m+1, vector<bool> (n+1));
dp[0][0] = true;
for (int i=0; i<=m; ++i) {
for (int j=1; j<=n; ++j) {
if (p[j] != '*') {
dp[i][j] = (i-1 >=0 && dp[i-1][j-1] && (s[i] == p[j] || p[j] == '.'));
} else{
dp[i][j] = (j-2 >= 0 && dp[i][j-2] || ((i-1>=0 && dp[i-1][j]) && (s[i] == p[j-1] || p[j-1] == '.')));
}
}
}
return dp[m][n];
}
};
j往右走两步,i往右走一步,j再往右走一步。
https://leetcode-cn.com/problems/regular-expression-matching/solution/shua-chuan-lc-dong-tai-gui-hua-jie-fa-by-zn9w/
2. 题目64 最小路径和
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
vector<vector<int>> dp(m, vector<int> (n, 0));
dp[0][0] = grid[0][0];
for (int j=1; j<n; ++j) {
dp[0][j] = dp[0][j-1] + grid[0][j];
}
for (int i=1; i<m; ++i) {
dp[i][0] = dp[i-1][0] + grid[i][0];
}
for (int i=1; i<m; ++i) {
for (int j=1; j<n; ++j) {
dp[i][j] = min(dp[i-1][j]+ grid[i][j],
dp[i][j-1]+ grid[i][j]);
}
}
return dp[m-1][n-1];
}
};