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

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


http://www.kler.cn/a/556074.html

相关文章:

  • Qt中使用QPdfWriter类结合QPainter类绘制并输出PDF文件
  • 15增减字符串匹配(贪心)思路解析+源码
  • WPS接入deepseek-OfficeAI助手插件下载
  • 武汉火影数字|VR沉浸式空间制作 VR大空间打造
  • Spring面试题2
  • uniapp引入ucharts组件不显示
  • Flask flash() 消息示例
  • ChatGPT付费创作系统V3.1.3独立版 WEB端+H5端+小程序端 (DeepSeek高级通道+推理输出格式)安装教程
  • 在windows下安装windows+Ubuntu16.04双系统(上)
  • Visual Studio 开发 C# 项目 VS. QT 开发 C++ 项目:全面对比与选择指南
  • 4.4/Q1,FAERS数据库最新文章解读!
  • 虚拟机的创建及配置
  • 【Python项目】基于Python的Web漏洞挖掘系统
  • 深入理解 C++17 的缓存行接口
  • 用Python实现的双向链表类,包含了头插、尾插、归并排序等功能
  • STM32-温湿度上传OneNET项目
  • 这个TensorFlow是一个开源的机器学习框架,怎么用
  • 【蓝桥杯集训·每日一题2025】 AcWing 6135. 奶牛体检 python
  • Scala的宝藏库:探索常用的第三方库及其应用
  • OpenCV机器学习(8)随机森林(Random Forests)算法cv::ml::RTrees类