【剑指offer】_17正则表达式的匹配

题目描述

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

解题思路

就是分两种情况,看表达式的下一个字符是不是'*'

  1. pattern下一个字符不为‘*’:这种情况比较简单,直接匹配当前字符。如果
    匹配成功,继续匹配下一个;如果匹配失败,直接返回false。注意这里的
    “匹配成功”,除了两个字符相同的情况外,还有一种情况,就是pattern的
    当前字符为‘.’,同时str的当前字符不为‘\0’。
  2. pattern下一个字符为‘*’时,稍微复杂一些,因为‘*’可以代表0个或多个。
    这里把这些情况都考虑到:
    • ‘*’匹配0个字符时,str当前字符不变,pattern当前字符后移两位,
      跳过这个‘*’符号;
    • ‘*’匹配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;//如果表达式的下一个字符不是*//正常处理//判断当前是否相等或者只要表达式为.并且匹配的字符串不为空//然后返回str+,pattern+1判断下一个if(*(pattern+1) != '*'){if(*str == *pattern || *str != '\0'&& *pattern == '.')return match(str+1,pattern+1);elsereturn false;}//否则下一个字符为'*'else{if(*str == *pattern || *str!= '\0' && *pattern == '.')return match(str,pattern+2)|| match(str+1,pattern);elsereturn match(str,pattern+2);}}
};

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

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

相关文章

大四阶段的社会实践的主要目的是_疫情当前,大三大四的学生“很惨”?大一大二的学生也别松懈...

大四毕业生不容易这次疫情对于高校学生而言,可以说是各有各的难处,“这届毕业生很惨”更是屡上热搜。不可否认,大四毕业生确实很不容易,论文答辩、毕业、求职就业等都受到了影响,虽然有困难,但各方都在积极…

【剑指offer】_18 数据流中的中位数

题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流…

【剑指offer】_19 滑动窗口中的最大值

题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,…

android 文字反转_多文字共享信息系统

欧阳贵林 www.HeZi.net首发表于2016年03月23日“ 处在信息时代的开端,信息技术不应有特殊的文字性,需要创建多文字共享信息系统,给各国文字一个公平的参与信息与科技创新发展的平台。这是世界的事,更是中国事。”01人类语言语言文…

LeetCode【1--两数之和】 LeetCode【2--两数相加】

两数之和 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 解题思路 直接两…

input数字开头不能为0_李商隐为初恋写诗,每句以数字开头,最后10字一直被仿从未被超越...

上学时,每次写作文,老师总爱在耳边念叨:“你的作文得让阅卷老师看得懂,不然不可能给你高分的!”每次听到话,笔者总是用李商隐的诗来和他斗嘴。是的,李商隐的诗作常常是让人读不懂的,…

lsass.exe 当试图更新密码时_“驱动人生”下载器木马再度更新-你应该注意什么?...

360安全大脑监测到通过"驱动人生"供应链攻击传播的挖矿木马在1月30日下午4时左右再次更新。此次更新中,木马在此前抓取系统帐户密码的基础上增加了抓取密码hash值的功能,并试图通过pass the hash攻击进行横向渗透,使得该木马的传播…

LeetCode【3--无重复的最长字串】 LeetCode【4--有序数组中的中位数】

无重复的最长字串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 解题思路 看到这道题,其实就两个步骤,遍历字符串,记录当前字符有没有重复。 重复一般解决就是哈希,这里用个数组表示…

hwt字体转换ttf_五分钟教你弄懂了字体反爬是个啥

今天的文章内容主要是关于字体反爬。目前已知的几个字体反爬的网站是猫眼,汽车之家,天眼查,起点中文网等等。以前也看过这方面的文章,今天跟个老哥在交流的时候,终于实操了一把,弄懂了字体反爬是个啥玩意。…

LeetCode【5--最长的回文子串】 LeetCode【6--Z字形变换】

最长的回文子串 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 解题思路 可以跟无重复的最长子串一样,用一个滑动窗口,只不过这个窗口的右边界往右,左边界每回要从右边界的下标往左…

androidstudio 日历视图怎么显示农历_中秋国庆旅游攻略怎么做?用这个便签软件很简单...

九月已经到来,中秋节和国庆节距离我们也不远了,今年的中秋和国庆节重叠了有足足八天的假期。不少人都想趁着这个小长假出门旅游,要想保证旅游质量,那么就要做好攻略。中秋国庆旅游攻略怎么做?要想做好一份中秋国庆旅游…

c++ select函数_PySpark 操作函数一览

PySpark 操作函数一览Created: Sep 14, 2020 10:28 AM Tags: Big Data, PySpark, Python, SparkPyspark.sql.functionsfrom pyspark.sql import functions as F函数使用说明基本数学函数类abssin、cos、tan、asin、acos 、atan、sinh、cosh、tanhceil、round、floorexp、log、l…

LeetCode【7--整数反转】 LeetCode【8--字符串转整数】

整数反转 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 解题思路 x%10 取一位,x/10下一位,注意越界, 代码实现 class Solution { public:int reverse(int x) {int sum 0;while(x){if(s…

word2003如何设置护眼模式_ERP系统上线,如何设置采购收货的模式,提升企业的采购效率...

如何合理的规划采购计划上次去拜访一个朋友,他们说公司既然出现没有下达采购订单,供应商也有送货过来的事情,对于公司来说,这个是非常严重的问题。若用了ERP系统之后,如何避免类似的事情发生,今天我们来分享…

LeetCode【9-- 回文数】LeetCode【10 --正则表达式的匹配】

回文数 题目描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 解题思路 判断该数的逆序数是不是和原数相同 代码实现 class Solution { public:bool isPalindrome(int x) {if(…

sun键盘没有stop键_请教Sun键盘

请教Sun键盘(2011-12-24 06:01:11)标签:计算机杂谈请教Sun键盘Sun键盘上,Help和F1之间的空白键是干啥的?Space旁边的两个菱形标志的呢?Compose呢?谢谢!请教Sun键盘Space旁边的两个菱形标志是一个类似Ctrl、Alt的修饰键,叫Meta。可以用Meta;键名来定义…

LeetCode【11--盛水最多的容器】LeetCode【12 -- 整数转罗马数字】

盛水最多的容器 题目描述 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共…

LeetCode【13--罗马数字转整数】LeetCode【14--最长的公共前缀】

罗马数字转整数 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X II 。 27 写做 XXVII, 即为 XX…

linux 编译3g驱动_linux下使用3G拨号上网 以及3g驱动设置

中兴WCDMA模块 Linux拨号流程Version 1.0目录1. 测试准备……………………………………………………..…32. 拨号脚本………………………………………………………133. 拨号过程………………………………………………………161. 测试准备本文档测试模块:MF210(中兴W…

文件压缩(基于LZ77的压缩)

LZ77压缩原理 初始LZ77 LZ77是基于字节的通用压缩算法,它的原理就是将源文件中的重复字节(即在前文中出现的重复字节)使用(offset,length,nextchar)的三元组进行替换 这里的 长度–offset,距离—length,先行缓冲匹配…