【华为OD机试真题】字符串通配符(200分)

2023-11-06


题目

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M

在计算机中,通配符是一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求实现字符串通配符的算法。

要求:
实现如下2个通配符:
* : 匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)
?: 匹配1个字符
注意:匹配时不区分大小写。

输入:
通配符表达式;
一组字符串。

输出:
返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false
数据范围:字符串长度:1 ≤ s ≤ 100

进阶:时间复杂度:O(n2) ,空间复杂度:O(n)

输入描述

先输入一个带有通配符的字符串,再输入一个需要匹配的字符串

输出描述

返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false

示例1

输入
te?t*.*
txt12.xls
输出
false

示例2

输入
?*Bc*?
abcd
输出
true

示例3

输入
p*p*qp**pq*p**p***ppq
pppppppqppqqppqppppqqqppqppqpqqqppqpqpppqpppqpqqqpqqp
输出
false

本题可在牛客网练习:字符串通配符


个人解法

提示:个人学习,并非最优解,欢迎指正

正则解法:实际答题时,本题如果使用正则全匹配(即代码中注释的一行),或者使用fullmath(), 容易在示例3用例处超时2s,不能通过全部用例. 所以本题改成用findall(),然后判断str2是否在匹配的结果列表中。

import re
while True:
    try:
        str1 = input().strip().lower()
        str2 = input().strip().lower()
        str1 = str1.replace(".", "\.").replace("*", "[a-z0-9]*").replace("?", "[a-z0-9]{1}")
        #str1 = f"^{str1}$"
        if str2 in re.findall(str1,str2):
            print("true")
        else:
            print("false")
    except:
        break

总结

需要注意的地方:

  1. 此题的*和?跟re模块正则的匹配范围不一致,限定了[a-z0-9]的范围和匹配的数量,所以要特别注意;
  2. 另外此题的.号等也不是re里面的通配符,所以需要转义(其实很多其他符号应该也需要转义,但是本题用例不涉及所以没有写)

系列文章目录

系列文章
【华为OD机试真题】字符串通配符


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

【华为OD机试真题】字符串通配符(200分) 的相关文章

  • 发送自动电子邮件时安全输入密码

    这很可能是重复的 但我已经非常仔细地研究了类似的问题 This https stackoverflow com questions 28393750 secure email without prompting for password r
  • 使用“iloc”时出现“尝试在 DataFrame 切片的副本上设置值”错误

    Jupyter 笔记本返回此警告 C anaconda lib site packages pandas core indexing py 337 SettingWithCopyWarning A value is trying to be
  • 如何分组显示argparse子命令?

    对于具有许多子命令的程序 我想在 help 输出中显示它们按逻辑分组 Python argparse 有一个add argument group http docs python org library argparse html argp
  • 使用Python选择屏幕区域

    我正在用 Python 开发一个屏幕截图实用程序 目前它是专门针对 Linux 的 到目前为止 我已经能够拍摄完整桌面的屏幕截图 并将其上传到 Imgur 然后将链接复制到剪贴板 现在我想扩展到诸如活动窗口或特定选择的屏幕截图之类的功能 如
  • 在 Flask 中将配置文件作为字典读取

    在 instance app cfg 我已经配置 test test 在我的烧瓶文件 app py 中 with app open instance resource app cfg as f config f read print con
  • python下安装xgboost 32位msys失败

    尝试安装 xgboost 失败 Windows 和企业版版本为 Anaconda 2 1 0 64 位 我该如何继续 我一直在使用 R 似乎从 RStudio 在 R 中安装新包相当容易 但在间谍程序中则不然 因为我需要进入命令窗口来执行此
  • 使用 Python 将 Json 转换为换行 Json 标准

    我有一个获取嵌套对象并删除所有嵌套的代码 使对象平坦 def flatten json y param y Unflated Json return Flated Json out def flatten x name if type x
  • 如何在 Python 中从 C++/C# 紧密实现 ?: ?

    在 C 中 我可以轻松编写以下内容 string stringValue string IsNullOrEmpty otherString defaultString otherString 有没有一种快速的方法可以在 Python 中做同
  • 如何在Python中使用内联正则表达式修饰符[重复]

    这个问题在这里已经有答案了 我有一个正则表达式 n DOCUMENTATION n n n 2 s 女巫我正在尝试处理这样的一些文件 usr bin python coding utf 8
  • Python 请求包含有值的参数和没有值的参数

    我正在为 API 编写一个 Python 包装器 该 API 支持具有值的查询参数 例如param1如下 和查询参数do not有价值观 例如param2如下 即 https example com service param1 value
  • Pythonwinsound,ASYNC 标志不起作用?

    我正在使用 python 3 5 我试图在继续执行脚本的同时播放声音 根据https docs python org 3 5 library winsound html https docs python org 3 5 library w
  • django 密码重置功能中出现 NoReverseMatch 错误

    我正在尝试在 django 中实现密码重置功能 下面是我的代码 urls py urlpatterns patterns url r signup accounts views signup name signup email url r
  • 当输入是 DataFrame 时,在seaborn中对箱线图进行分组

    我打算在一个图中绘制多个列pandas dataframe 全部按另一列分组 使用groupby inside seaborn boxplot 对于类似的问题 这里有一个很好的答案matplotlib matplotlib 分组箱线图 ht
  • Mxnet - 缓慢的数组复制到 GPU

    我的问题 我应该如何在 mxnet 中执行快速矩阵乘法 我的具体问题 数组复制到 GPU 的速度很慢 对此我们能做些什么呢 我创建随机数组 将它们复制到上下文中 然后相乘 import mxnet as mx import mxnet nd
  • 如何使用 NLP 确定句子中的中心词?

    例如 如果我得到一个句子 一名英国士兵在阿富汗战斗中丧生 这句话的中心词是 杀 给定 Python 中的 nltk 包 我怎样才能找到它 我不是在谈论词干 我指的是中心词 您正在寻找中心词句子解析 它可以在 Python 的 nltk 包中
  • 通过 Selenium 和 python 切换到 iframe

    我如何在硒中切换到这个 iframe 只知道 您可以使用 XPath 来定位 iframe driver find element by xpath iframe name Dialogue Window Then switch to th
  • 删除aws beanstalk上的uuid python包

    这是针对所提出问题的后续帖子 问题here https stackoverflow com questions 44421761 flask beanstalk deployment errors 以防万一对其他人有用 自从第一篇文章以来
  • 检查一个数是否是完全平方数

    如何检查一个数是否是完全平方数 速度并不重要 目前 只是工作 See also Integer square root in python https stackoverflow com questions 15390807 依赖任何浮点计
  • 捕获 subprocess.run() 的输入

    我在 Windows 上有一个交互式命令行 exe 文件 是由其他人编写的 当程序出现异常时 它会终止 并且我对程序的所有输入都会丢失 所以我正在编写一个 python 程序 它调用一个阻塞子进程subprocess run 并捕获所有输入
  • 如何将 pygame Surface 转换为 PIL 图像?

    我正在使用 PIL 来透视地变换屏幕的一部分 原始图像数据是一个 pygame Surface 需要转换为 PIL 图像 因此我发现了 pygame 的 tostring 函数就是为了这个目的而存在的 然而结果看起来很奇怪 见附图 这段代码

随机推荐

  • Linux系统编程之常用线程同步的三种方法

    Linux系统编程之线程同步高效率编程 Linux系统中线程最大的特点就是共享性 线程同步问题较为困难也很重要 最常用的三种是 条件变量 互斥锁 无名信号量 ps 有名信号量可用于进程同步 无名信号量只能用于线程同步 是轻量级的 一 互斥锁
  • Google Guava

    转载自并发编程网 ifeve com 本文链接地址 Google Guava官方教程 中文版 中文文档 http ifeve com google guava 开源地址 https github com google guava 今天偶然发
  • swagger3或者swagger报nullpointexception

    很简单这个问题就是版本不匹配 就是2 6 0以上版本的springbootmvc扫描方法和老版本不同 在springboot配置 application yml 里面加上如果是properties则是加上 spring mvc pathma
  • 配置Spark on YARN集群内存

    在这里插入代码片 运行文件有几个G大 默认的spark的内存设置就不行了 需要重新设置 还没有看Spark源码 只能先搜搜相关的博客解决问题 按照Spark应用程序中的driver分布方式不同 Spark on YARN有两种模式 yarn
  • 利用CNN进行人脸年龄预测

    很久之前做的东西了 最近做了一个人脸相似度检测 里面用到了这里的一个模型 所以抽个空把人脸年龄检测的思路总结一下 与其他CNN分类问题类似 人脸年龄预测无非就是将人脸分为多个类别 然后训练卷积神经网络 最后利用训练好的卷积神经网络进行分类即
  • 数据结构: 线性表(无哨兵位单链表实现)

    文章目录 1 线性表的链式表示 链表 1 1 顺序表的优缺点 1 2 链表的概念 1 3 链表的优缺点 1 4 链表的结构 2 单链表的定义 2 1 单链表的结构体 2 2 接口函数 3 接口函数的实现 3 1 动态申请一个结点 BuySL
  • SparkStreaming与Kafka010之05之02 Consumer的offset 自定义设置offset

    package Kafka010 import Kafka010 Utils MyKafkaUtils import org apache kafka clients consumer ConsumerRecord import org a
  • IDEA创建Springboot项目提示`Initialization failed for ‘https://start.spring.io‘ Please check URL`

    1 1 settings gt http proxy 2 check connection 在其中输入 https start spring io 3 开始创建 4 导入springweb的一个依赖 5 创建成功 选中的3个为maven环境
  • CSS样式——旋转工具箱

    目录 基础模板 工具箱样式 加号按钮样式 工具按钮样式 旋转效果 CSS样式 旋转工具箱 效果如下所示 基础模板 首先我们准备基础模板 模板代码如下图所示
  • 盘点12个Python数据可视化库

    大家好 我是小z 这篇文章是关于一本很奈斯的可视化书籍的介绍 老规矩 文末小z简单粗暴的抽奖送出1本 在数据可视化的研究热潮中 如何让数据生动呈现 成了一个具有挑战性的任务 随之也出现了大量的可视化软件 相对于其他商业可视化软件 Pytho
  • C#多线程之BackgroundWorker

    一 BackgroundWorker介绍 我们有时要执行耗时的操作 在该操作未完成之前操作用户界面 会导致用户界面停止响应 解决的方法就是新开一个线程 把耗时的操作放到线程中执行 这样就可以在用户界面上进行其它操作 新建线程可以用 Thre
  • jvm垃圾回收机制

    如何判定一个对象是不是垃圾对象 1 引用计数法 2 根可达性算法 引用计数法 2 可达性分析算法 垃圾回收算法 1 标记清除算法 位置不连续 会产生磁盘碎片 2 复制算法 没有碎片 浪费空间 3 标记整理 没有碎片 效率偏低
  • 算法训练营第十七天(7.29)

    目录 LeeCode513 Find Bottom Left Tree Value LeeCode112 Path Sum LeeCode113 Path Sum ll LeeCode106 Construct Binary Tree fr
  • [C语言]---操作符

    1 算术操作符 的两个操作数必须为整数 3 2 1 3 0 2 1 5 2 移位操作符 左移 lt lt num lt lt 1 num值不变 右移 gt gt 分两种 逻辑移位 左边用0填充 右边丢弃 算术移位 左边用原该值的符号位填充
  • VMware下Ubuntu与宿主Windows共享文件夹

    概述 1 安装VMware Tool 2 设置共享 步骤 开始安装VMware Tool 显示如下画面 如果宿主无法访问外网 可能会出现一个更新失败 可以无视之 通过下列命令解压 执行 分别是下面的tar和sudo的两行 下面是已有vmwa
  • AcWing 372. 棋盘覆盖(二分图&&匈牙利算法)

    输入样例 8 0 输出样例 32 解析 n为100 状压肯定爆 将每个骨牌看成二分图的一个匹配 即查找二分图的一个最大匹配 匈牙利算法 include
  • C# 数据类型_摘自菜鸟教程

    数据类型 值类型 Value types 引用类型 Reference types 对象 Object 类型 动态 Dynamic 类型 字符串 String 类型 指针类型 Pointer types 值类型 Value types 值类
  • CAP的分区容错性

    一直没有理解CAP 中P的分区容错性是什么意思 系统部分节点出现故障后 连接正常节点还可以使用系统提供的服务
  • VS项目中引入dll的方法

    引入dll的方法 方法1 配置属性 gt 调试 gt 环境 输入path 包含dll文件的文件夹路径 方法2 1 将dll文件拷贝到生成的 exe所在的文件夹中 2 项目右键 添加引用 选择dll文件 我用的第二种
  • 【华为OD机试真题】字符串通配符(200分)

    目录 题目 输入描述 输出描述 示例1 示例2 示例3 个人解法 总结 系列文章目录 题目 时间限制 C C 1秒 其他语言2秒 空间限制 C C 32M 其他语言64M 在计算机中 通配符是一种特殊语法 广泛应用于文件搜索 数据库 正则表