面试题19:正则表达式匹配

2023-05-16

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

	Test("Test01", "", "", true);
    Test("Test02", "", ".*", true);
    Test("Test03", "", ".", false);
    Test("Test04", "", "c*", true);
    Test("Test05", "a", ".*", true);
    Test("Test06", "a", "a.", false);
    Test("Test07", "a", "", false);
    Test("Test08", "a", ".", true);
    Test("Test09", "a", "ab*", true);
    Test("Test10", "a", "ab*a", false);
    Test("Test11", "aa", "aa", true);
    Test("Test12", "aa", "a*", true);
    Test("Test13", "aa", ".*", true);
    Test("Test14", "aa", ".", false);
    Test("Test15", "ab", ".*", true);
    Test("Test16", "ab", ".*", true);
    Test("Test17", "aaa", "aa*", true);
    Test("Test18", "aaa", "aa.a", false);
    Test("Test19", "aaa", "a.a", true);
    Test("Test20", "aaa", ".a", false);
    Test("Test21", "aaa", "a*a", true);
    Test("Test22", "aaa", "ab*a", false);
    Test("Test23", "aaa", "ab*ac*a", true);
    Test("Test24", "aaa", "ab*a*c*a", true);
    Test("Test25", "aaa", ".*", true);
    Test("Test26", "aab", "c*a*b", true);
    Test("Test27", "aaca", "ab*a*c*a", true);
    Test("Test28", "aaba", "ab*a*c*a", false);
    Test("Test29", "bbbba", ".*a*a", true);
    Test("Test30", "bcbbabab", ".*a*a", false);

【参考代码】

#include<iostream>
//#include<vector>
#include<string>
//#include<stack>

using namespace std;

bool matchCore(const char* str, const char* pattern)
{
	if (*str=='\0'&&*pattern=='\0')
	{
		return true;
	}
	
	if (*(pattern+1)=='*')
	{
		if (*str == *pattern || (*pattern == '.' && *str != '\0'))
		{
			return matchCore(str + 1, pattern + 2) || matchCore(str + 1, pattern) || matchCore(str, pattern + 2);

		}
		else
		{
			return matchCore(str, pattern + 2);
		}
	}
	if (*str == *pattern || (*pattern == '.' && *str != '\0'))
	{
		return matchCore(str + 1, pattern + 1);
	}

	return false;
}
bool match(const char*str,const char*pattern)
{
	if (str==nullptr||pattern==nullptr)
	{
		return false;
	}

	return matchCore(str, pattern);
}

int main()
{
	cout<<match("aaa", "a.a")<<endl;
	cout<<match("aaa", "ab*ac*a")<<endl;
	cout << match("aaa", "aa.a") << endl;
	cout << match("aaa", "ab*a") << endl;
	
	return 0;
}

/****
{ 0 , 3}[give|show]{0,3}me{0,3} [the](money|cash){0,5}
[show)me[the](money|cash)
{5, 0}( money | cash){0,5}
(  | money)


1
0
0
0


***/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试题19:正则表达式匹配 的相关文章

  • FPGA开发板选型

    1 Micro Phase微相官方旗舰店 淘宝链接 1 小熊猫嵌入式电子 淘宝链接 2 正点原子 淘宝链接 3 黑金ALINX 淘宝链接
  • 红黑树原理

    文章目录 参考链接红黑树简介RB Tree的五条基本性质RB Tree的基本操作增情景1 xff1a 红黑树为空树情景2 xff1a 插入结点的Key已存在情景3 xff1a 插入结点的父结点为黑结点情景4 xff1a 插入结点的父结点为红
  • B+tree原理

    文章目录 参考链接B 43 树B树B 43 树与B树的对比B 43 树的插入与分裂 之 删除与合并插入与分裂删除与合并示例 参考链接 B 43 tree详解及实现 C语言 B tree详解及实现 C语言 印度老哥视频讲解 xff1a 彻底理
  • ubuntu 20.04设置开机自启动脚本

    ubuntu16 04 以后的版本不再使用initd管理系统 xff0c 因此不再支持 update rc d 方式添加开机自启脚本 Ubuntu18 版本开始 xff0c 使用了systemd 替代了 initd 管理系统 xff0c 并
  • 核心功能(core 模块)

    英文版原文链接 您将了解这个库的基本构建块 为了理解如何在像素级上操作图像 xff0c 必须阅读 Mat 基本的图像容器 您将了解如何在内存中存储图片 xff0c 以及如何将其内容打印到控制台 如何扫描图像 xff0c 查找表 和 用Ope
  • Mat——基本的图像容器

    英文版原文链接 文章目录 目标Mat存储方法显式创建一个Mat对象格式化输出其他常用项的输出 目标 我们有多种方法从现实世界获取数字图像 数码相机 扫描仪 计算机断层扫描和磁共振成像等等 在以上任何情况下 xff0c 我们 人类 看到的都是
  • TCP/IP 网络协议基础入门

    文章目录 1 TCP IP简介IP 地址域名MAC 地址端口号封装和分用 2 链路层介绍控制帧的传输差错控制反馈重发计时器序号流量控制 以太网PPP xff08 点对点协议 xff09 SLIP 与 PPPSLIP 协议PPP 协议 MTU
  • 一些致力于底层图像处理算法的大神

    只 挚 爱图像处理 SSE图像算法优化系列九 xff1a 灵活运用SIMD指令16倍提升Sobel边缘检测的速度
  • 网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    详解网络传输中的三张表 xff0c MAC地址表 ARP缓存表以及路由表MAC地址表 ARP缓存表以及路由表MAC地址表 ARP缓存表 路由表及交换机 路由器基本原理
  • malloc 函数详解

    malloc详细malloc 函数详解malloc 函数详解 原文
  • 内存对齐示例及详解

    示例 什么是内存对齐 xff1f 为什么要内存对齐 xff1f 内存对齐的规则以及作用 详解 为什么要内存对齐 Data alignment Straighten up and fly right关于内存对齐 转 内存对齐
  • MySQL 基础课程

    文章目录 1 SQL 介绍及 MySQL 安装相关概念MySQL安装1 安装之前的检查2 Ubuntu Linux 安装配置 MySQL3 尝试 MySQL 2 创建数据库并插入数据1 新建数据库2 连接数据库3 数据表4 新建数据表5 数
  • Redis 简明教程

    1 Redis 安装介绍 2 Redis 数据类型 3 Redis 系统管理 4 Redis 高级应用
  • 操作系统原理与实践1

    文章目录 1 熟悉实验环境实验环境的工作模式编译内核运行调试 xff08 1 xff09 汇编级调试 xff08 2 xff09 C 语言级调试 文件交换 1 熟悉实验环境 1 Bochs 是一个免费且开放源代码的 IA 32 xff08

随机推荐

  • 第五章 C#基础控件

    常用控件的分类及作用 控件分类作用文本类控件在控件上显示文本 TextBox Label选择类控件为用户提供选择的项目 xff0c RadioButton CheckBox等分组控件可以将窗体中的其他控件分组处理 GroupBox Pane
  • GDB 简明教程

    文章目录 1 GDB 常用命令实战1 GDB 的基本介绍GDB 的进入和退出GDB 命令行界面使用技巧 2 GDB 查看源码3 GDB 断点设置断点查看断点信息删除断点关闭和启用断点 4 关于断点的其他知识断点启用的更多方式断点调试的一些命
  • gpu加速计算机视觉(cuda 模块)

    英文链接 文章目录 利用显卡运行OpenCV算法 xff0c 从你的系统中挤出每一点计算能力 GPU的相似性检查 PNSR和SSIM 如果你已经知道如何处理其他模块 xff0c 这将有助于您快速掌握 xff1a 如何在GPU模块上编码 作为
  • GPU的相似性检查(PNSR和SSIM)

    英文原文链接 文章目录 目的源码怎么做呢 GPU优化结果与结论 目的 在 视频输入和相似性度量 教程中 xff0c 我已经介绍了用于检查两幅图像之间相似性的 PSNR xff08 峰值信噪比 xff09 和SSIM xff08 结构相似度算
  • 借助OpenCV进行视频输入和相似性测量

    英文原文链接 文章目录 目的源码如何读取视频流 在线相机或离线文件 图像相似度 PSNR和SSIM 目的 如今 xff0c 有一个数字视频记录系统任由你操作是常见的 因此 xff0c 您最终会遇到这类情况 xff1a 即不再处理一批图像 x
  • C++实现高性能内存池

    文章目录 1 默认分配器及其性能测试概述内存池简介主函数设计模板链表栈 96 typedef typename Alloc template rebind other allocator 96 总结 2 实现高性能内存池设计内存池实现1 M
  • 计算机组成原理

    文章目录 第一章 计算机的基本组成第二章 计算机的发展及应用第三章 计算机的系统总线第四章 存储器第五章 输入输出系统第六章 数字第七章 CPU指令第八章 CPU结构和功能第九章 控制单元的功能第十章 控制单元的设计 第一章 计算机的基本组
  • 深入理解计算机操作系统之一——计算机系统漫游

    文章目录 第一章 计算机系统漫游1 1 信息就是 bits 43 上下文1 2 程序被其他程序翻译成不同的格式1 3 了解编译系统是如何工作的 xff08 大有裨益 xff09 1 4 处理器读并解释储存在内存中的指令1 4 1 系统的硬件
  • 光学器件基础

    透镜近似与方程 1 s 1 s
  • 镜头技术参数基础

    文章目录 参考文献木桶效应镜头与相机的匹配镜头常用名词视场 xff08 FOV xff09 倍率最大兼容CCD芯片大小 工作距离 xff08 WD xff09 镜头接口焦距焦距 xff1a 光学系统的主点到焦点的距离 焦距越小 xff0c
  • LED与照明光学基础知识

    LED封装类型 插件封装 xff08 小功率 xff09 xff1b 角度受控COB封装 xff08 超大功率 xff09 xff1b 出光面积大贴片封装 xff08 中功率 xff09 xff1b 出光面积大贴片封装 xff08 大功率
  • 【论文阅读】Feature Denoising for Improving Adversarial Robustness

    阅读由来SCRDet 43 43 参考文献 20 https blog csdn net dujuancao11 article details 121590324 Feature Denoising for Improving Adver
  • 文件描述符

    理解文件描述符 谈谈自己对文件描述符的理解
  • 面试题13:机器人的运动范围

    题目描述 题目 xff1a 地上有一个m行n列的方格 一个机器人从坐标 0 0 的格子开始移动 xff0c 它 每一次可以向左 右 上 下移动一格 xff0c 但不能进入行坐标和列坐标的数位之和 大于k的格子 例如 xff0c 当k为18时
  • 21届字节跳动校招提前批2020.07.18晚,笔试记录

    1 山形数组去重 xff0c 并排序 要求时间复杂度O N xff0c 空间复杂度O 1 xff1b 输入输出描述 span class token comment 输入 span span class token number 1 spa
  • 面试题15 二进制中1的个数

    题目 xff1a 请实现一个函数 xff0c 输入一个整数 xff0c 输出该数二进制表示中1的个数 例如 把9表示成二进制是1001 xff0c 有2位是1 因此如果输入9 xff0c 该函数输出2 输入输出描述 span class t
  • 面试题16:数值的整数次方

    题目 xff1a 实现函数double Power double base int exponent xff0c 求base的exponent次方 不得使用库函数 xff0c 同时不需要考虑大数问题 输入输出描述 span class to
  • 面试题17:打印1到最大的n位数

    题目 xff1a 输入数字n xff0c 按顺序打印出从1最大的n位十进制数 比如输入3 xff0c 则打印出1 2 3一直到最大的3位数即999 输入输出描述 span class token function Test span spa
  • 面试题18:删除链表结点

    面试题18 xff08 一 xff09 xff1a 在O 1 时间删除链表结点 题目 xff1a 给定单向链表的头指针和一个结点指针 xff0c 定义一个函数在O 1 时间删除该 结点 输入输出描述 参考代码 span class toke
  • 面试题19:正则表达式匹配

    题目 请实现一个函数用来匹配包含 和 的正则表达式 模式中的字符 表示任意一个字符 xff0c 而 39 表示它前面的字符可以出现任意次 xff08 含0次 xff09 在本题 中 xff0c 匹配是指字符串的所有字符匹配整个模式 例如 x