博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer:面试题19. 正则表达式匹配
阅读量:3907 次
发布时间:2019-05-23

本文共 1473 字,大约阅读时间需要 4 分钟。

题目:正则表达式匹配

请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。

示例 1:

输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:s = "aa"p = "a*"输出: true解释: 因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。

示例 3:

输入:s = "ab"p = ".*"输出: true解释: ".*" 表示可匹配零个或多个('*')任意字符('.')。

示例 4:

输入:s = "aab"p = "c*a*b"输出: true解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。

示例 5:

输入:s = "mississippi"p = "mis*is*p*."输出: false
s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。

解题:

  • 使用dp
  • dp[i][j]表示s的前i个字符和p的前j个字符是否匹配。
  • 刚开始的初始化,尤其是dp[0][m]的数值
class Solution {public:    bool isMatch(string s, string p) {        int l1 = s.size(),l2 = p.size();        vector
> dp(l1 + 1,vector
(l2 + 1,false)); dp[0][0] = true; for(int j = 1;j <= l2;j++){ if(p[j - 1] == '*' && j - 2 >= 0) dp[0][j] = dp[0][j - 2]; } for(int i = 1;i <= l1;i++){ for(int j = 1;j <= l2;j++){ if(p[j - 1] == s[i - 1] || p[j - 1] == '.'){ dp[i][j] = dp[i - 1][j - 1]; }else if(p[j - 1] == '*'){ if(p[j - 2] == s[i - 1] || p[j - 2] == '.') dp[i][j] = (dp[i - 1][j] || dp[i][j - 2]); else dp[i][j] = dp[i][j - 2]; } } } return dp[l1][l2]; }};

 

转载地址:http://hfgen.baihongyu.com/

你可能感兴趣的文章
【NServiceBus】什么是Saga,Saga能做什么
查看>>
ASP.NET Core 集成测试中模拟登录用户的一种姿势
查看>>
程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
查看>>
[ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
查看>>
.NET Core 3.0之深入源码理解HealthCheck(一)
查看>>
收藏!推荐12个超实用的Visual Studio插件
查看>>
2020年你应该学习 .Net Core
查看>>
[译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
查看>>
.NETCore3.1中的Json互操作最全解读-收藏级
查看>>
【实战 Ids4】║ 给授权服务器加个锁——HTTPS配置
查看>>
2020年了,再不会Https就老了
查看>>
Kubernetes,多云和低代码数据科学:2020年最热门的数据管理趋势
查看>>
.NET Core 3.1之深入源码理解HealthCheck(二)
查看>>
C# WPF 表单更改提示
查看>>
【原创】StackOverflow 20万关注的问题:如何实现异步Task超时的处理?
查看>>
.NET Core 3.1通用主机原理及使用
查看>>
UnitTest in .NET(Part 1)
查看>>
CAP 3.0 版本正式发布
查看>>
Xamarin.Forms弹出对话框插件
查看>>
UnitTest in .NET(Part 4)
查看>>