当前位置: 首页 > news >正文

java练习(36)

ps:题目来自力扣

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

  • '.' 匹配任意单个字符
  • '*' 匹配零个或多个前面的那一个元素

所谓匹配,是要涵盖 整个 字符串 s 的,而不是部分字符串。

class Solution {
    public boolean isMatch(String s, String p) {
        int m = s.length();
        int n = p.length();
        // dp[i][j] 表示 s 的前 i 个字符和 p 的前 j 个字符是否匹配
        boolean[][] dp = new boolean[m + 1][n + 1];
        // 空字符串和空模式是匹配的
        dp[0][0] = true;

        // 处理模式 p 以 '*' 开头的情况
        for (int j = 1; j <= n; j++) {
            if (p.charAt(j - 1) == '*') {
                dp[0][j] = dp[0][j - 2];
            }
        }

        // 填充 dp 数组
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (p.charAt(j - 1) == '.' || p.charAt(j - 1) == s.charAt(i - 1)) {
                    // 当前字符匹配,取决于前一个状态
                    dp[i][j] = dp[i - 1][j - 1];
                } else if (p.charAt(j - 1) == '*') {
                    // 遇到 '*' 的情况
                    if (p.charAt(j - 2) == '.' || p.charAt(j - 2) == s.charAt(i - 1)) {
                        // 前一个字符匹配,有三种情况:* 匹配 0 次、1 次、多次
                        dp[i][j] = dp[i][j - 2] || dp[i - 1][j - 2] || dp[i - 1][j];
                    } else {
                        // 前一个字符不匹配,* 只能匹配 0 次
                        dp[i][j] = dp[i][j - 2];
                    }
                }
            }
        }

        return dp[m][n];
    }
}

相关文章:

  • 如何在 React 中测试高阶组件?
  • python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04
  • Docker挂载数据显式挂载和隐式挂载的区别
  • DeepSeek掘金——VSCode 接入DeepSeek V3大模型,附使用说明
  • ubuntu ffmpeg 安装踩坑
  • Liunx(CentOS-6-x86_64)系统安装MySql(5.6.50)
  • 基于灾害链动仿真分析路径
  • 为AI聊天工具添加一个知识系统 之115 详细设计之56 知识表征 之2
  • Linux修改主机名称
  • c#编程:学习Linq,重几个简单示例开始
  • logging-operator 部署fluentd-bit日志报kubernetes链接错误
  • 【弹性计算】虚拟化技术
  • 报错:Cannot read properties of null (reading ‘ce‘)解决方法
  • C 端产品-用户的分群图纸 - AxureMost
  • 机器学习实战(12):项目实战—端到端的机器学习项目Kaggle糖尿病预测
  • 除了 EasyXLS,加载和显示.xlsx 格式的excel表格,并支持单元格背景色、边框线颜色和粗细等格式化特性
  • FBX与STEP格式解析及FBX转STEP在线转换指南
  • 记录一下_treafik使用Gateway-APi使用的细节参数
  • MySQL数据库——表的约束
  • 数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)
  • 做盗号网站/《新闻联播》 今天
  • 公司网站域名到期骗局/宁波最好的seo外包
  • 公司内部网站创建/网络营销推广公司网站
  • 淄博市建设业协会网站/360建网站
  • eclipse可以做网站吗/网站搜索排名优化
  • 互联网医院网站建设/全球网站排名查询