offer150-19:正则表达式匹配

news2024/10/5 23:30:23

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

分析:每次从字符串里拿一个字符和模式中的字符去匹配。如果模式中的字符是 '.' ,那么它可以匹配字符串中的任意一个字符。如果模式中的字符不是 '.' ,而有具体的某个字符,且与字符串中的当前字符相同,那么它们相互匹配。当字符串中的字符和模式中的字符相互匹配时,接着匹配后面的字符。

        当模式中的第二个字符不是' * '时,只要比较字符串中的第一个字符是否和模式中的第一个字符相匹配,如果相匹配,那么字符串和模式上都向后移动一个字符,如果不匹配,则直接返回false。

        当模式中的第二个字符是' * '时,需分类讨论。因为可能有多种不同的匹配方式。一种选择是' * '表示0次选择时,需要在模式上向后移动两个字符,这相当于' * '和它前面的字符被忽略了。第二种选择是当模式中的第一个字符和字符串中的第一个字符相匹配,则在字符串上向后移动一个字符,而在模式上又有两种选择:可以在模式上向后移动两个字符(表示已匹配完成),也可以保持不变(表示未匹配完成,还需匹配)。

代码:

        

bool match(char* str,char* pattern){

    if(str == nullptr || pattern == nullptr){
        return false;
    }
    return matchCore(str,pattern);
}

bool matchCore(char* str,char* pattern){

    if(*str == '\0' && *pattern == '\0'){
        return true;
    }
    if(*str != '\0' && *pattern == '\0'){
        return false;
    }
    if(*(pattern + 1) == '*'){
        if(*pattern == *str || (*pattern == '.' && *str != '\0')){
            //如果第一个字符相匹配,且模式第二个字符是'*'
            return matchCore(str + 1,pattern + 2) || matchCore(str + 1,pattern) || matchCore(str,pattern + 2);
        }
        else {
            如果第一个字符不匹配,则该字符模式匹配0次,然后继续匹配下一个模式。
            return macthCore(str,pattern + 2);
        }
    }
    if(*str == *pattern || (*pattern == '.' && *str != '\0'){ //如果第二个字符不为'*',且第一个字符匹配
        return matchCore(str + 1,pattern + 1);         //继续匹配下一个字符
    }
    return false;                   //如果不匹配 则返回false
}

 

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

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

相关文章

nginx访问图片报403的问题

在安装好nginx后, 编辑/etc/nginx/sites-available/default加上了如下内容: # 图片文件的位置location /images/ {alias /home/lighthouse/images/;autoindex on; # 可选,允许目录列表access_log off; # 可选,禁用访问日志记录…

【人工智能】GPT-5的即将到来:从高中生进化到,,,博士生?

GPT-5的即将到来:从高中生进化到,博士生? 随着近月GPT-4o的出世,OpenAI也在进行一系列的采访和介绍接下来的展望和目标。 在6月22日的采访中,美国达特茅斯工程学院公布了OpenAI首席技术官米拉穆拉蒂的访谈内容。穆拉蒂确认&#…

LaTeX 编辑协作平台 Overleaf 安装和使用教程

在学术界和科技行业,LaTeX 已成为撰写高质量文档的标准工具。然而,传统的 LaTeX 使用体验常常伴随着以下挑战: 学习曲线陡峭环境配置复杂多人协作困难实时预览不便 当然,市面上不乏很多在线 LaTeX 编辑平台,但它们大…

uniapp跨域问题解决

找到menifest文件,在文件的最后添加如下代码: // h5 解决跨域问题"h5":{"devServer": {"proxy": {"/adminapi": {"target": "https://www.demo.com", // 目标访问网址"changeOrigin…

哈喽GPT-4o,对GPT-4o 论文速写的思考与探索

作为一款强大的语言模型,ChatGPT 在论文写作上具备显著优势。它能够辅助学者或研究人员自动创建论文框架、摘要、文献综述及论文段落(如引言、方法、结果、结论等)。此外,ChatGPT 还能优化论文结构、润色、降低内容重复率&#xf…

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-BiLSTM时间序列预测,贝叶斯优化Transfor…

【Sklearn-驯化】轻松学会机器学习中的bagging基础模型随机森林的使用技巧

【Sklearn-驯化】轻松学会机器学习中的bagging基础模型随机森林的使用技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容…

CTF常用sql注入(一)联合注入和宽字节

0x01 前言 给自己总结一下sql注入的常用姿势吧,记录一下学习 0x02 联合 联合注入的关键词是union SQL的union联合注入原理是联合两个表进行注入攻击,使用union select关键词来进行联合查询。 那么为什么我们在题目中一般是只写一个呢 因为 $sql &quo…

ID3算法决策树

步骤: 先计算出信息量;信息熵;信息增量; 再比较信息增量的大小,确定分类依据。 信息量: 信息熵: 信息增益:

打印机删除副本以后无法安装打印机驱动

根据知乎文章解决打印机驱动副本存在多个,打印机驱动无法删除,或者驱动包无法删除等问题。的方法删除打印机副本以后发现无论如何也装不上驱动了。 要么驱动安装成功,但是设备仍然是指定状态。 后面发现是删错文件夹了,教程里让删…

上海网站建设如何做

上海是中国最繁华的城市之一,作为全国的经济、文化和科技中心,网站建设在上海变得越来越重要。如何做好上海网站建设,让网站更加吸引人,成为企业和个人宣传自身的重要平台呢? 首先,要有清晰的定位和目标。在…

《信息记录材料》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《信息记录材料》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《信息记录材料》级别? 答:国家级。主管单位:全国磁性记录材料信息站 主办单位…

【笔记】在window上连接虚拟机中的redis

愚昧啊 困扰了我近两天的问题居然是因为是java代码写错地方了 在虚拟机中进入redis.conf文件 vim redis.conf /bind --斜杠搜索关键词 将值设置为 bind 0.0.0.0 保存 退出:wq 回到java中 添加redis依赖 刷新maven 就是在这一步出问题……………………………………自己在蓝…

09 - Python图形用户界面和游戏开发

图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter)&…

五粮液:稳,还稳得住吗?

前有“酱香”茅台一骑绝尘,后有“清香”汾酒21%的增速虎视眈眈。 在新的股东大会上,管理层把“稳”字说了近30次。 就问白酒二哥——五粮液,你还稳得住吗? 近期,白酒大哥茅台因跌价吸引各方关注,但在这一…

对标GPT-4o!不锁区、支持手机、免费使用,Moshi来啦!

7月4日凌晨,法国知名开源AI研究实验室Kyutai在官网发布了,具备看、听、说多模态大模型——Moshi。 Moshi功能与OpenAI在5月14日展示的最新模型GPT-4o差不多,可以听取人的语音提问后进行实时推理回答内容。但GPT-4o的语音模式要在秋天才能全面…

VDS虚拟导播切换台软件

VDS 导播软件是一款功能强大的虚拟导播系统软件,具有全媒体接入、播出内容丰富、调音台、快捷切播与导播键盘、云台控制等特点,同时支持向多个平台直播推流。以下是一些常见的 VDS 导播软件特点: 1. 全媒体接入:支持多种设备和网…

AI绘画Stable Diffusion 新手入门教程:万字长文解析Lora模型的使用,快速上手Lora模型!

大家好,我是设计师阿威 今天给大家讲解一下AI绘画Stable Diffusion 中的一个重要模型—Lora模型,如果还有小伙伴没有SD安装包的,可以看我往期入门教程2024最新超强AI绘画Stable Diffusion整合包安装教程,零基础入门必备&#xff…

本地搭建Stable Diffusion,文生图再也不用求别人了!

前言 本地搭建Stable Diffusion,文生图再也不用求别人了 1. 简介 Stable Diffusion 是一种深度学习模型,用于生成高质量的图像。它基于一种名为扩散过程的生成方法,能够在给定条件的情况下生成具有丰富细节的图像。 看看本文的搭建步骤&a…

国内外大模型集合

为了满足日益增长的AI需求,我们精心打造了一站式大模型导航网站,旨在成为连接您与全球顶尖人工智能模型的桥梁。无论您是科研工作者、开发者还是对AI充满好奇的探索者,这里都有您所需。 国内大模型精选 通义千问 —— 阿里巴巴集团倾力打造…