题目:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配
- '.' 匹配任意单个字符
- '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 leetcode题目链接
动态规划算法步骤:
- 定义状态
- 状态转移
我的JavaScript解法
/**
* @param {string} s
* @param {string} p
* @return {boolean}
*/
var isMatch = function(s, p) {
const m = s.length;
const n = p.length;
const dp = Array.from(Array(m+1), () => [].fill.call(new Array(n+1),false));
dp[0][0] = true;
for (let j = 1; j <n+1; j++) {
if(p[j-1] =='*')
dp[0][j] = dp[0][j-2]
}
for (let i = 1; i <m+1; i++) {
for (let j = 1; j <n+1; j++) {
if (s[i-1] == p[j-1] || p[j-1] == '.') {
dp[i][j] = dp[i-1][j-1]
} else if (p[j-1] == '*') {
if (s[i-1] != p[j-2] && p[j-2] != '.') {
dp[i][j] = dp[i][j-2]
} else {
dp[i][j] = dp[i][j-2] || dp[i-1][j]
}
}
}
}
return dp[m][n]
};
解析: 用动态规划法,比较难于讲解,参考flix的讲解 复杂度分析:
- 时间复杂度:
- 空间复杂度: