【动态规划】LeetCode-10. 正则表达式匹配

10. 正则表达式匹配。

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。

  • ‘.’ 匹配任意单个字符
  • ‘*’ 匹配零个或多个前面的那一个元素
    所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

示例 1:

输入:s = "aa", p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:s = "aa", p = "a*"
输出:true
解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。

示例 3:

输入:s = "ab", p = ".*"
输出:true
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。

提示:

1 <= s.length <= 20
1 <= p.length <= 20
s 只包含从 a-z 的小写字母。
p 只包含从 a-z 的小写字母,以及字符 . 和 *。
保证每次出现字符 * 时,前面都匹配到有效的字符
算法分析

解题思路
dp
image
image

class Solution {
    public boolean isMatch(String s, String p) {
        int n = s.length(), m = p.length();
        s = " " + s;
        p = " " + p;
        boolean[][] f = new boolean[n + 1][m + 1];
        f[0][0] = true;
        for (int i = 0; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (p.charAt(j) != '*') {
                    f[i][j] = i != 0 && f[i - 1][j - 1] && (s.charAt(i) == p.charAt(j) || p.charAt(j) == '.');
                } else {
                    f[i][j] = f[i][j - 2] 
                    || (i != 0 && f[i - 1][j] && (s.charAt(i) == p.charAt(j - 1) || p.charAt(j - 1) == '.'));
                }
            }
        }
        return f[n][m];
    }
}

复杂性分析

时间复杂度:O(mn)
空间复杂度:O(mn)

相关推荐

  1. LeetCode-10. 表达式匹配

    2024-01-07 01:24:04       62 阅读
  2. leetCode算法—10. 表达式匹配

    2024-01-07 01:24:04       71 阅读
  3. LeetCode_10_困难_表达式匹配

    2024-01-07 01:24:04       68 阅读
  4. LeetCode热题Hot100 - 表达式匹配

    2024-01-07 01:24:04       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 01:24:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 01:24:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 01:24:04       87 阅读
  4. Python语言-面向对象

    2024-01-07 01:24:04       96 阅读

热门阅读

  1. Elasticsearch(实践一)相似度方法L1、L2 、cos

    2024-01-07 01:24:04       57 阅读
  2. 探索Elasticsearch内存应用的关键因素

    2024-01-07 01:24:04       56 阅读
  3. C语言中的输入输出详解

    2024-01-07 01:24:04       66 阅读
  4. 第七节 按需导入elementPlus

    2024-01-07 01:24:04       62 阅读
  5. [数理统计]中国科技技术大学缪柏其

    2024-01-07 01:24:04       45 阅读
  6. 常见的深度相机品牌有哪些。

    2024-01-07 01:24:04       55 阅读
  7. 线特征_LSD直线检测算法和LBD直线描述子

    2024-01-07 01:24:04       61 阅读
  8. k8s之pod进阶

    2024-01-07 01:24:04       54 阅读
  9. Android 车联网——CarManager管理器(四)

    2024-01-07 01:24:04       60 阅读
  10. Android.mk 常用模块类型

    2024-01-07 01:24:04       49 阅读