力扣 NO.10正则表达式匹配
这一题比较经典,可以说力扣上的题都很经典,所以为了谨防我日后忘记此题,特写此博文来记忆。此代码已经过验证,可以通过
public class Why { public static void main(String[] args) { boolean b=regex("aa","a."); System.out.println(b); } public static boolean regex(String s,String p){ int m=s.length(); int n=p.length(); boolean[][] b=new boolean[m+1][n+1]; b[0][0]=true;
//这里j从1开始的原因是,j=0是没必要,因为都是false,i从1开始是有*号,它有true的情况 for (int i = 0; i <=m ; i++) { //这里为什么要从0开始呢,它有个*号,要根据前两个来判断,所以不能省略从1开始,(题目不会一开始就输入*,此情况我们不考虑) for (int j = 1; j <=n; j++) { //这里为什么要从1开始呢,首先我设置的数组中j代表的是列(当然也可以设置为行),因为反正第一列出来第一个,它都是0 if (p.charAt(j-1)=='*'){ b[i][j]=b[i][j-2]; //遇到*,先看前两列的那个,是T则T if (matches(s,p,i,j-1)){ b[i][j]=b[i][j]||b[i-1][j]; //若前2列为F,则看它是否和*前面的字符相等 } }else { if (matches(s,p,i,j)){ b[i][j]=b[i-1][j-1]; //将它规划给它的子序列 } } } } return b[m][n]; } public static boolean matches(String s,String p,int i,int j){ if (i==0){ return false; } if (p.charAt(j-1)=='.'){ return true; } return s.charAt(i-1)==p.charAt(j-1); } }
有图有真相,能用图解释的就不废话。
力扣上的这人讲得很好,由于种种原因,我在这里也不能讲解详细,反正我是理解了。发现表格的规律,将它转换成代码
这一路,灯火通明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现