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

Leetcode JAVA刷刷站(10)正则表达式匹配

一、题目概述

二、思路方向 

       在Java中,实现一个支持'.'和'*'的正则表达式匹配器,可以通过递归或动态规划(DP)的方法来完成。这里,我将使用动态规划的方法来解决这个问题,因为它更容易理解和实现。

       动态规划的思路是,我们可以创建一个二维的布尔数组dp,其中dp[i][j]表示字符串s的前i个字符和模式p的前j个字符是否匹配。初始化时,dp[0][0]true(空字符串和空模式匹配),而dp[0][j](对于所有j > 0)只有在p的前j个字符都是*时才为true,因为*可以匹配零个字符。

       接下来,我们遍历dp数组,填充剩余的条目。对于每个(i, j),我们考虑以下情况:

  1. 如果p[j-1]不是*,那么dp[i][j]为真当且仅当s[i-1] == p[j-1]p[j-1] == '.'dp[i-1][j-1]为真。
  2. 如果p[j-1]*,那么有两种可能性:
    • 忽略*和前面的字符,即看dp[i][j-2]
    • 匹配零个或多个前面的字符,这取决于dp[i-1][j](如果s[i-1]匹配p[j-2],则可以通过添加s[i-1]到匹配中)为真。

三、代码实现 

public class Solution {  public boolean isMatch(String s, String p) {  int m = s.length();  int n = p.length();  // 创建一个二维布尔数组dp  boolean[][] dp = new boolean[m + 1][n + 1];  dp[0][0] = true; // 空字符串和空模式匹配  // 初始化dp[0][j],只有当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) != '*') {  dp[i][j] = (s.charAt(i - 1) == p.charAt(j - 1) || p.charAt(j - 1) == '.') && dp[i - 1][j - 1];  } else {  // 两种情况:匹配0次或多次前面的字符  dp[i][j] = dp[i][j - 2]; // 忽略*和前面的字符  if (s.charAt(i - 1) == p.charAt(j - 2) || p.charAt(j - 2) == '.') {  dp[i][j] = dp[i][j] || dp[i - 1][j];  }  }  }  }  return dp[m][n];  }  public static void main(String[] args) {  Solution solution = new Solution();  System.out.println(solution.isMatch("aa", "a"));    // false  System.out.println(solution.isMatch("aa", "a*"));   // true  System.out.println(solution.isMatch("ab", ".*"));   // true  System.out.println(solution.isMatch("aab", "c*a*b")); // true  System.out.println(solution.isMatch("mississippi", "mis*is*p*.")); // false  }  
}

执行结果:

 四、小结 

       这个实现通过动态规划解决了正则表达式的匹配问题,时间复杂度为O(mn),空间复杂度也为O(mn),其中m和n分别是字符串s和模式p的长度。

 结语 

因为遇见你,我才知道我也能具有美丽的记忆。

所以,无论你怎样对待我,

我都会用心去宽恕你的恨

用心去铭记你的好

!!!

相关文章:

Leetcode JAVA刷刷站(10)正则表达式匹配

一、题目概述 二、思路方向 在Java中&#xff0c;实现一个支持.和*的正则表达式匹配器&#xff0c;可以通过递归或动态规划&#xff08;DP&#xff09;的方法来完成。这里&#xff0c;我将使用动态规划的方法来解决这个问题&#xff0c;因为它更容易理解和实现。 动态规划的思…...

合并图片为pdf

1.先使用IDM在网页下载&#xff1a; 2.按文件类型分组&#xff0c;在按名称大小排序&#xff0c;之后使用Acrobat合并文件成一个pdf即可...

【Linux Install】Ubuntu20, Windows10 双系统安装

1. 制作启动盘 1.1 下载 Ubuntu 系统镜像 ISO 文件 从 Ubuntu 官网下载 (https://cn.ubuntu.com/download/desktop)。官网访问慢的&#xff0c;从国内镜像点下。 1.2 烧录 Ubuntu ISO 镜像 下载 Rufus&#xff1a;从Rufus官网下载 Rufus 工具。 插入U 盘&#xff1a;将U盘插…...

Keepalived + LVS实现高可用

1、简介 LVS和Keepalived是Linux操作系统下实现高可用的负载均衡解决方案的重要工具。通过协同工作&#xff0c;它们能够实现一种高性能、高可用的负载均衡服务&#xff0c;使得用户能够透明地访问到集群中的服务。同时&#xff0c;它们还提供了强大的监控和故障切换功能&#…...

Gin框架接入Prometheus,grafana辅助pprof检测内存泄露

prometheus与grafana的安装 grom接入Prometheus,grafana-CSDN博客 Prometheus 动态加载 我们想给Prometheus新增监听任务新增ginapp项目只需要在原来的配置文件下面新增ginapp相关metric 在docker compose文件下面新增 执行 docker-compose up -d curl -X POST http://lo…...

上海凯泉泵业入职测评北森题库题型分析、备考题库、高分攻略

上海凯泉泵业&#xff08;集团&#xff09;有限公司是一家大型综合性泵业公司&#xff0c;专注于设计、生产、销售泵、给水设备及其控制设备。作为中国泵行业的领军企业&#xff0c;凯泉集团拥有7家企业和5个工业园区&#xff0c;总资产达到25亿元&#xff0c;生产性建筑面积35…...

Linux:基础IO

目录 1. stdin & stdout & stderr 2. 系统文件I/O 1. 接口介绍 open write read close lseek 2. open函数返回值 3. 文件描述符fd 0 & 1 & 2 文件描述符的分配规则 重回定向 dup2 简易Shell的模拟实现 4. FILE 5. 再谈对文件的理解 1. stdin …...

奥运奖牌窥视

1 前言 2024巴黎奥运会已经闭幕了&#xff0c;中国队创纪录地获得了海外举办的奥运会的最佳成绩&#xff0c;我们来个管中窥豹&#xff0c;看看中国队从哪些项目中取得了奖牌。 2 奖牌组成 游泳真是大项&#xff0c;小项数量众多&#xff0c;比如个人自由泳就有100m、200m、4…...

RUST实现远程操作电脑手机

简介&#xff1a; Rust Desk 是一个开源的远程桌面软件&#xff0c;能够完全替代向日葵和ToDesk的功能&#xff0c;包括电脑控制电脑、电脑控制手机、手机控制电脑等。它是完全免费的。 下载&#xff1a; 需要下载 Rust Desk 的服务端和客户端安装包。 安装&#xff1a; 服务…...

spring01-spring容器启动过程分析

【README】 本文总结自《spring揭秘》&#xff0c;作者王福强&#xff0c;非常棒的一本书&#xff0c;墙裂推荐&#xff1b; spring容器根据配置元素组装可用系统分2个阶段&#xff0c;包括spring容器启动&#xff0c; springbean实例化阶段&#xff1b; 本文详细分析spring容…...

RAG与LLM原理及实践(12)--- Milvus RRFRanker的使用场景及源码分析

目录 背景 rrfRanker 简介与实例 核心逻辑 实例 蕴含思想 rrfRanker VS weightedRanker rrfRanker weightedRanker 场景使用区别 RRFRanker 使用场景 weightedRanker 使用场景 代码 代码实现 运行结果 修改代码 再次运行结果 源码 源码实现 解释 Ranker 可…...

Nginx与Tomcat的区别

Nginx与Tomcat的区别 —— 经验笔记 引言 在现代Web开发中&#xff0c;选择合适的服务器软件对于构建高性能、可靠的应用程序至关重要。Nginx 和 Tomcat 是两种常见的服务器软件&#xff0c;尽管它们都可以被归类为Web服务器&#xff0c;但它们的设计目标和应用场景有着本质的…...

LeetCode 3151.特殊数组 I

【LetMeFly】3151.特殊数组 I 力扣题目链接&#xff1a;https://leetcode.cn/problems/special-array-i/ 如果数组的每一对相邻元素都是两个奇偶性不同的数字&#xff0c;则该数组被认为是一个 特殊数组 。 Aging 有一个整数数组 nums。如果 nums 是一个 特殊数组 &#xff…...

【产品那些事】The OX Active ASPM Platform

文章目录 前言关于OX Security产品理念 流程体验Complete Visibility&#xff1a;将安全无缝嵌入到SDLC中PBOMOSC&R coverageContextualized Prioritization&#xff1a;快速解决最关键的风险Accelerated Response&#xff1a;简化安全流程See Beyond the Code&#xff1a;…...

欢迪迈手机商城设计与开发

TOC springboot137欢迪迈手机商城设计与开发 绪论** 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0…...

Endnote与word关联 解决方案: COM加载项-----》CWYW插件安装

1、首先说一下本次情况&#xff0c;office的版本是2019&#xff0c;后安装的Endnote 9。旧版word也可按此方法尝试。 2、先找到关键的EndNote Cwyw.dll文件。应在此目录下&#xff1a;C:\Program Files (x86)\EndNote X7\Product-Support\CWYW。 3、如没有EndNote Cwyw.dll文…...

用R语言运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容&#xff0c;每篇文章都在 5000 字以上&#xff0c;质量平均分高达 94 分&#xff0c;看全文请点击下面链接&#xff1a; 1章4节&#xff1a;数据可视化&#xff0c; R 语言的静态绘图和 Shiny 的交互可视化演…...

Upload-Lab第3关:如何巧妙应对黑名单文件后缀检测?

关卡介绍 在Pass03中,我们面临的挑战是绕过文件上传功能的黑名单检测机制。黑名单检测是一种常见的安全措施,它通过检查上传文件的后缀来阻止特定类型的文件(如 .php, .exe)被上传。在这一关,我们需要找到一种方法,上传一个可以执行的恶意文件,同时绕过黑名单检测。 …...

SSLVPN对比IPSECVPN安全设备的起源、发展、以及目前行业使用场景

前言 SSL VPN&#xff08;Secure Sockets Layer Virtual Private Network&#xff09;是一种利用SSL/TLS&#xff08;Transport Layer Security&#xff0c;传输层安全&#xff09;协议来创建安全连接的技术&#xff0c;它允许远程用户通过公共网络&#xff08;通常是互联网&am…...

Hadoop大数据集群搭建

一、虚拟机配置网络 1、配置文件 进入“/etc/sysconfig/network-scripts”目录&#xff0c;查看当前目录下的“ifcfg-ens33”文件 对“ens33”文件进行配置 2、重启网络 systemctl restart network 3、测试网络 Ping www.baidu.com 4、设置虚拟机主机名称 5、绑定主机名和…...

【技术前沿】MetaGPT入门安装部署——用多个大语言模型解决任务!一键安装,只需填写OpenAI API

项目简介 MetaGPT 是一个多智能体框架&#xff0c;旨在构建全球首家 “AI 软件公司”。该项目通过为 GPT 分配不同的角色&#xff0c;模拟产品经理、架构师、工程师等职业&#xff0c;协同完成复杂的软件开发任务。MetaGPT 将一个简单的需求转化为完整的软件开发流程&#xff…...

#compsoer基本使用01#

Composer 是 PHP 的依赖管理工具&#xff0c;它允许开发人员管理和安装项目所需的依赖包。 1:查看Compsoer的全局配置命令 composer config -g --list --verbose 这个可以查看composer的镜像地址。例如 [repositories.packagist.org] type (string) : composer [repositor…...

基于c++的yolov5推理之前处理详解及代码(一)

目录 一、前言&#xff1a; 二、关于环境安装&#xff1a; 三、首先记录下自己的几个问题 问题&#xff1a;c部署和python部署的区别&#xff1f; 四、正文开始 4.1 图像预处理讲解 1、BGR---->RBG 2、等比例放缩图片&#xff08;涉及到短边的填充&#xff09; 3、归一化…...

Oracle(55)什么是并行查询(Parallel Query)?

并行查询&#xff08;Parallel Query&#xff09;是数据库管理系统中的一种查询优化技术&#xff0c;它允许数据库引擎同时使用多个处理器或线程来执行查询操作。通过将查询任务分解为多个子任务&#xff0c;并在多个处理器上同时执行这些子任务&#xff0c;可以显著提高查询的…...

关于 Lora中 Chirp Spread Spectrum(CSS)调制解调、发射接收以及同步估计的分析

本文结合相关论文对CSS信号的数学形式、调制解调、发射接收以及同步估计做了全面分析&#xff0c;希望有助于更好地理解lora信号 long-range (LoRa) modulation, also known as chirp spread spectrum (CSS) modulation, in LoRaWAN to ensure robust transmission over long d…...

Java - API

API全称"Application Programming Interface"&#xff0c;指应用程序编程接口 API&#xff08;JDK17.0&#xff09;链接如下 : Overview (Java SE 17 & JDK 17) (oracle.com)https://docs.oracle.com/en/java/javase/17/docs/api/中文版&#xff1a; Java17中…...

力扣 3152. 特殊数字Ⅱ

题目描述 queries二维数组是nums数组待判断的索引区间&#xff08;左闭右闭&#xff09;。需要判断每个索引区间中的nums相邻元素奇偶性是否不同&#xff0c;如果都不同则该索引区间的搜索结果为True&#xff0c;否则为False。 暴力推演&#xff1a;也是我最开始的思路 遍历q…...

识别和缓解软件安全威胁的最佳工具

软件安全威胁会给企业带来重大损失&#xff0c;从经济损失到声誉受损。 企业必须主动识别和缓解这些威胁&#xff0c;防止它们造成危害。 幸运的是&#xff0c;有许多工具可以帮助企业识别和缓解软件安全威胁。 在本博客中&#xff0c;我们将探讨识别和缓解软件安全威胁的顶…...

Linux下的压缩与解压:掌握核心命令行工具

目录 一.前言 二.压缩文件概述 三.tar&#xff1a;Linux 的通用归档工具 常用 tar 命令 四.gzip&#xff1a;强大的压缩程序 常用 gzip 命令 五.zip 和 unzip&#xff1a;处理 ZIP 压缩文件 常用 zip 和 unzip 命令 实用技巧和最佳实践 六.结语 一.前言 在 Linux …...

BGP选路实验

要求&#xff1a; 1.如图连接网络&#xff0c;合理规格IP地址&#xff0c;AS200内IGP协议为OSPF&#xff1b; 2.R1属于AS 100&#xff1b;R2-R3-R4小AS234、R5-R6-R7小AS567&#xff0c;同时声明大AS 200&#xff0c;R8属于AS300&#xff1b; 3.R2-R5、R4-R7之间为联邦EBGP邻居…...

隐藏网站开发语言/360收录查询

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递减…...

php做的网站好么/河南网站优化

题意&#xff1a;给你 n个点 m条边 每条边有些公司支持 问 a点到b点的路径有哪些公司可以支持 这里是一条路径中要每段路上都要有该公司支持 才算合格的一个公司 分析&#xff1a;map[i][j] 等于 i直接到 j 的 公司数,加上i经过中间节点到 j 的 公司数 因为每两个站点间的…...

深圳网站维护有限公司/深圳百度推广代理

平常下载东西或者玩游戏,都分电信和联通区,当然选自己的供应商所在的网络.确实会下载东西快一点或者玩游戏不卡,但一直没有太直观的了解,今天偶然间访问一个网站(http://51CTO提醒您&#xff0c;请勿滥发广告!/bbs/),这个网站有电信和联通的服务器,ip如下: 电信主服务器的ip是&…...

云南网站定制/高级seo

原文出处&#xff1a; PAWEL KLIMCZYK 译文出处&#xff1a;码农网/小峰 你已经对着电脑 n 个小时了。敲键盘正成为一种负担&#xff0c;你在想&#xff0c;键盘是否是西西弗斯推着的那块巨石。 伯乐在线转注&#xff1a;西西弗斯是希腊神话中的人物&#xff0c;与更加悲剧…...

南昌网站小程序开发/seo公司运营

一&#xff1a;依赖关系 1&#xff1a;依赖和血缘关系介绍 rdd.todebugstring&#xff1a;打印血缘关系 rdd.dependencies&#xff1a;打印依赖关系 2&#xff1a;保存血缘关系 3&#xff1a;OneToOne依赖---窄依赖 4&#xff1a;shuffle依赖--宽依赖 新的RDD的一个分区的数据…...

有限公司网站建设 互成网络地址 四川/友链查询站长工具

有时候为了项目需求需要对CPU性能做一个压力测试&#xff0c;这里提供一种方法。通过对圆周率位数进行计算进而确定CPU性能&#xff0c;根据定义预计执行时间&#xff0c;具体操作如下:time echo "scale1000; 4*a(1)" | bc -l -q通过该命令运行&#xff0c;如果3、4分…...