news 2026/8/13 8:10:05

LeetCode 10 正则表达式匹配 - DP经典hard

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 10 正则表达式匹配 - DP经典hard

LeetCode 10 正则匹配,Hard DP,处理好*的"匹配零次还是多次"是关键。


🔴 正则表达式匹配

实现.*的正则匹配。.匹配任意单字符,*匹配前一个字符 0 次或多次。


如果用回溯暴力枚举*是 0 次还是 1 次还是 2 次…… 分支爆炸。DP 的角度:dp[i][j]表示 s 的前 i 个字符和 p 的前 j 个字符是否匹配。

遇到*时有两条路——匹配 0 次(把字符*当空气,跳过)、匹配 1 次(消耗 s 当前字符,*留着还能继续用)。

publicbooleanisMatch(Strings,Stringp){intm=s.length(),n=p.length();boolean[][]dp=newboolean[m+1][n+1];dp[0][0]=true;// 处理空 s 的情况:p 中 "a*" 可以匹配空for(intj=1;j<=n;j++){if(p.charAt(j-1)=='*')dp[0][j]=dp[0][j-2];}for(inti=1;i<=m;i++){for(intj=1;j<=n;j++){charsc=s.charAt(i-1),pc=p.charAt(j-1);if(pc!='*'){dp[i][j]=dp[i-1][j-1]&&(sc==pc||pc=='.');// 直接匹配}else{charprev=p.charAt(j-2);// * 前面的字符dp[i][j]=dp[i][j-2]||// * 匹配 0 次(dp[i-1][j]&&(sc==prev||prev=='.'));// * 匹配 1 次}}}returndp[m][n];}

dp[i][j - 2]是"匹配 0 次"——把字符*整个扔了。dp[i - 1][j]是"匹配 1 次"——消耗 s 的一个字符,*还留在原地(因为 j 没变,下次还能继续用)。DP 表维度是 (m+1)×(n+1),dp[0][0] 表示两个空串匹配,记得初始化空 s 时*能消掉前一个字符的情况。


这道题你踩过什么坑?或者你用别的语言实现过吗?评论区聊聊,回头复习也方便翻。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 8:09:22

软件设计师自学备考全攻略:三轮复习法与核心考点突破

1. 项目概述&#xff1a;为什么选择自学软件设计师&#xff1f; 软件设计师&#xff0c;作为软考&#xff08;计算机技术与软件专业技术资格水平考试&#xff09;中级资格里最经典、最“硬核”的一个方向&#xff0c;一直是很多技术人职业晋升路上的关键一步。它不像高级的系统…

作者头像 李华
网站建设 2026/8/13 8:08:57

C语言学习指南:从零基础到项目实战,掌握指针与内存管理核心

1. 为什么选择翁恺老师的C语言课程&#xff1f; 如果你正在寻找一门C语言的入门课程&#xff0c;或者在网上搜索“C语言 学习笔记”&#xff0c;大概率会看到“浙大 翁恺”这个名字。这不是偶然。在我自己学习编程&#xff0c;以及后来带新人的过程中&#xff0c;无数次验证了…

作者头像 李华
网站建设 2026/8/13 8:08:43

Java AI Agent开发实战:四大框架选型与RAG系统构建指南

1. 项目概述&#xff1a;Java 在 AI Agent 浪潮中的新角色 最近和几个做 Python 后端的朋友聊天&#xff0c;他们聊起 LangChain、AutoGPT 这些 AI Agent 框架时眉飞色舞&#xff0c;仿佛 Java 开发者在这场智能化的盛宴里只能当个看客。这让我这个老 Java 有点不服气。确实&a…

作者头像 李华
网站建设 2026/8/13 8:07:04

状态机思维:用工程化框架优化个人思考与决策流程

1. 项目概述&#xff1a;当“状态机”遇见“思维”最近在折腾一些AI Agent和自动化流程时&#xff0c;我反复被一个词刷屏&#xff1a;状态机。从OpenClaw的部署报错&#xff0c;到LangGraph构建的Agent工作流&#xff0c;再到讨论LLM&#xff08;大语言模型&#xff09;的推理…

作者头像 李华
网站建设 2026/8/13 8:06:24

C语言循环语句全解析:for、while、do-while与break/continue实战指南

1. 循环语句&#xff1a;程序员的“重复劳动”终结者如果你刚开始学编程&#xff0c;看到满屏的代码要重复执行几十上百次&#xff0c;是不是会感到绝望&#xff1f;难道要复制粘贴几百行吗&#xff1f;当然不是。循环语句&#xff0c;就是编程语言赐予我们对抗这种“重复劳动”…

作者头像 李华
网站建设 2026/8/13 8:05:21

STM32标准库入门:从工程搭建到外设驱动的核心实践指南

1. 从零到一&#xff1a;为什么STM32标准库依然是入门的“定海神针”最近在整理资料&#xff0c;翻出了几年前跟着江协科技&#xff08;现在大家更习惯叫江科大&#xff09;的视频学习STM32时记下的一堆笔记。看着那些密密麻麻的寄存器操作、GPIO配置和中断服务函数&#xff0c…

作者头像 李华