道指mt4代码_剑指offer算法题052:正则表达式匹配

小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第052是道剑指offer算法题

题目描述

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

题解在注释中,相对之前的题目,这道题难度更大些。

/*    解这题需要把题意仔细研究清楚,反正我试了好多次才明白的。    首先,考虑特殊情况:         1>两个字符串都为空,返回true         2>当第一个字符串不空,而第二个字符串空了,返回false(因为这样,就无法            匹配成功了,而如果第一个字符串空了,第二个字符串非空,还是可能匹配成            功的,比如第二个字符串是“a*a*a*a*”,由于‘*’之前的元素可以出现0次,            所以有可能匹配成功)    之后就开始匹配第一个字符,这里有两种可能:匹配成功或匹配失败。但考虑到pattern    下一个字符可能是‘*’, 这里我们分两种情况讨论:pattern下一个字符为‘*’或    不为‘*’:          1>pattern下一个字符不为‘*’:这种情况比较简单,直接匹配当前字符。如果            匹配成功,继续匹配下一个;如果匹配失败,直接返回false。注意这里的            “匹配成功”,除了两个字符相同的情况外,还有一种情况,就是pattern的            当前字符为‘.’,同时str的当前字符不为‘\0’。          2>pattern下一个字符为‘*’时,稍微复杂一些,因为‘*’可以代表0个或多个。            这里把这些情况都考虑到:               a>当‘*’匹配0个字符时,str当前字符不变,pattern当前字符后移两位,                跳过这个‘*’符号;               b>当‘*’匹配1个或多个时,str当前字符移向下一个,pattern当前字符                不变。(这里匹配1个或多个可以看成一种情况,因为:当匹配一个时,                由于str移到了下一个字符,而pattern字符不变,就回到了上边的情况a;                当匹配多于一个字符时,相当于从str的下一个字符继续开始匹配)    之后再写代码就很简单了。*/class Solution {public:    bool match(char* str, char* pattern){        if (*str == '\0' && *pattern == '\0')            return true;        if (*str != '\0' && *pattern == '\0')            return false;        //if the next character in pattern is not '*'        if (*(pattern+1) != '*')        {            if (*str == *pattern || (*str != '\0' && *pattern == '.'))                return match(str+1, pattern+1);            else                return false;        }        //if the next character is '*'        else        {            if (*str == *pattern || (*str != '\0' && *pattern == '.'))                return match(str, pattern+2) || match(str+1, pattern);            else                return match(str, pattern+2);        }    }};

猜你还想看

一个程序员写多门语言,写代码时会记串么?计算机专业学生,最应该学习的课程前五位是什么?

长按,扫码,关注

及时收看更多精彩内容

a7e121c48aaf117978217d5c27cfa013.png

博主:今日头条大数据工程师专注:求职 面经 源码 java 大数据技术分享

点击”阅读原文“:领取5T精品资料面试总结100+实战项目

我知道你 “在看b32db62bbe97f14db6e34285b097340d.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/news/328680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 程序集单元测试工具 SmokeTest 应用指南

Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试。一般地我们使用脚本来实现Smoke Test的自动化,可借用虚拟机的snapshot机制来保证干净的环境来进行Smoke Test,然后将测试好的程序集成到Con…

JavaFX将Node导出为图片

转载自 JavaFX将Node导出为图片在JavaFX中提供了一个很实用的功能。我们可以将任意节点截图导出。代码如下:WritableImage image mapCanvas.snapshot(new SnapshotParameters(), null); try { ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", fil…

要么干,要么滚,千万别混

原文来自网络,侵删! 公司里混日子的人,最终伤害的是自己!你混日子,就是日子混你,你自己是输家。 无论为谁打工,要为自己学东西,客观上为公司创造价值。 收获与投入成正比&#xff0c…

basemap安装_Python画地图逃不过的basemap「完全安装手册」 | 附下载

基础配置:Mac 2017 | Python3python虐我千百遍,我待python如初恋Python需要跳过的安装的坑太太太太多了!!!!!前段时间看《利用python进行数据分析》这本书,到可视化的部分,看着最后的例子地图挺酷炫的,跟着敲代码的过程…

秋招--持续更新

7月份 阿里 电话面试挂 高并发 多线程 8月16日 17:06 网易互娱一面跪 问题 树二叉树 堆排序 各种字符串处理

String与InputStream相互转换

转载自 String与InputStream相互转换1.String to InputStream String str "String与InputStream相互转换";InputStream in_nocode new ByteArrayInputStream(str.getBytes()); InputStream in_withcode new ByteArrayInputStream(str.getByt…

spring data jpa是什么?

spring data jpa是什么? 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jewelry008/article/details/76359516 Spring Data JPA能干什么 在开始之前,先举个简单的例子. 一张表user有三个字段&…

LINQ:进阶 - LINQ 标准查询操作概述

“标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法。大多数这些方法都在序列上运行&#xff0c;其中的序列是一个对象&#xff0c;其类型实现了IEnumerable<T> 接口或 IQueryable<T> 接口。标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询…

2020年日历电子版(打印版)_“温故知新”——2020年《故宫日历》(青少版)正式发布...

2020《故宫日历》(青少版)。供图2020《故宫日历》(青少版)。供图中新网北京10月28日电 (记者 冉文娟)由故宫出版社和新东方教育科技集团联合推出的2020年《故宫日历》(青少版)28日在故宫博物院正式发布。《故宫日历》是故宫博物院介绍故宫藏品、传播故宫文化的普及读物。此次故…

BufferedImage与byte[]互转

转载自 BufferedImage与byte[]互转一、需要用到的类java.awt.image.BufferedImage; javax.imageio.ImageIO; java.io.*;二、为什么要将BufferedImage转为byte数组在传输中&#xff0c;图片是不能直接传的&#xff0c;因此需要把图片变为字节数组&#xff0c;然后传输比较方便…

2016经典微小说:《轮回》

内容来源于&#xff1a;网络 多年前&#xff0c;每到清晨&#xff0c;她要送他去幼儿园前。他总是哭着对她恳求&#xff1a;“妈妈&#xff0c;我在家听话&#xff0c;我不惹你生气&#xff0c;求你别送我去幼儿园&#xff0c;我想和你在一起。” 急匆匆忙着要上班的她&#xf…

delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点

综合整理自&#xff1a;百度文库等向量自回归介绍&#xff1a;当我们对变量是否真是外生变量的情况不自信时&#xff0c;传递函数分析的自然扩展就是均等地对待每一个变量。在双变量情况下&#xff0c;我们可以令{yt}的时间路径受序列{zt}的当期或过去的实际值的影响&#xff0…

关于TCP/IP必须知道的几个基础问题

转载自 关于TCP/IP必须知道的几个基础问题描述一下TCP三次握手的过程 接下来我们根据下面这幅图来解释一下TCP三次握手。p.s: 每个箭头代表一次握手。第一次握手 client(客户端)发送一个SYN(seqx)包给server(服务器)&#xff0c;然后“期待”server的ACK回复。p.s: seq为sequ…

升讯威微信营销系统开发实践:(3)中控服务器的设计 .Net 还是 Java?

在上一篇文章中&#xff0c;简要介绍了升讯威微信营销系统的功能设计和架构设计&#xff0c;限于篇幅只能抛砖引玉&#xff0c;从本章节开始将围绕功能的设计和架构的设计进行详细的论述。 中控服务器的设计 在上文中&#xff0c;我们谈到需要一个中控服务器&#xff0c;用来维…

Java 虚拟机部分面试题

https://www.imooc.com/article/31018?block_idtuijian_wz https://www.imooc.com/article/31018?block_idtuijian_wz https://github.com/Snailclimb/Java_Guide https://github.com/Snailclimb/Java_Guide

linux 提取cpio_15. Linux提取RPM包文件(cpio命令)详解

在讲解如何从 RPM 包中提取文件之前&#xff0c;先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件&#xff0c;换句话说&#xff0c;cpio 命令可以从归档包中提取文件(或目录)&#xff0c;也可以将文件(或目录)复制到归档包中。归档包&#xff0c;也可称为文…

升讯威微信营销系统开发实践:(2)功能设计与架构设计

在上一篇中&#xff0c;我们详细分析了微信订阅号和服务号的区别&#xff0c;在本篇中&#xff0c;将进入正题&#xff1a;升讯威微信营销系统的功能设计及架构设计。 一、功能设计 1&#xff09;设计目标 ◇ 为微信服务号提供运营及管理所需的各种功能&#xff0c;包括微官网、…

解读分库分表中间件Sharding-JDBC

转载自 解读分库分表中间件Sharding-JDBC编者按】数据库分库分表从互联网时代开启至今&#xff0c;一直是热门话题。在NoSQL横行的今天&#xff0c;关系型数据库凭借其稳定、查询灵活、兼容等特性&#xff0c;仍被大多数公司作为首选数据库。因此&#xff0c;合理采用分库分表…

java面试设计模式

https://blog.csdn.net/yinyuehepijiu/article/details/38663843

新闻发布项目——实体类(User)

package bdqn.newsMange.entity; /*** User的实体类* author Administrator**/ public class User {private int userId;//编号private String userName;//用户名private String userPassword;//密码private String uRole;//角色public int getUserId() {return userId;}public…