首页 > 试题广场 >

字符串通配符

[编程题]字符串通配符
  • 热度指数:173934 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)
?:匹配1个字符

注意:匹配时不区分大小写。

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

输出:

返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false
数据范围:字符串长度:
进阶:时间复杂度:,空间复杂度:

输入描述:

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



输出描述:

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

示例1

输入

te?t*.*
txt12.xls

输出

false
示例2

输入

z
zz

输出

false
示例3

输入

pq
pppq

输出

false
示例4

输入

**Z
0QZz

输出

true
示例5

输入

?*Bc*?
abcd

输出

true
示例6

输入

h*?*a
h#a

输出

false

说明

根据题目描述可知能被*和?匹配的字符仅由英文字母和数字0到9组成,所以?不能匹配#,故输出false      
示例7

输入

p*p*qp**pq*p**p***ppq
pppppppqppqqppqppppqqqppqppqpqqqppqpqpppqpppqpqqqpqqp

输出

false
头像 KazamaHifumi
发表于 2021-11-15 20:32:45
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf 展开全文
头像 人生苦短,但求成长
发表于 2022-02-12 16:48:47
def fun(str1, str2): if str1 == '' and str2 == '': return True elif str1 == '' and str2 != '': return False elif str1 != 展开全文
头像 一条余弦Cos
发表于 2020-12-13 22:42:13
采用递归的思路。从前向后依次匹配: 遇到相同字符,都向后移动一个字符; 如果通配符遇到"?",则不需匹配,自动跳过一个字符; 如果通配符遇到"*",则可以匹配任意多个字符,包括0个,此时可以有三种选择: 1.匹配0个,通配符向后移动一个字符,字符串不动; 2.匹配1个,通配符和字符 展开全文
头像 牛客666号.
发表于 2022-03-05 07:51:04
这题难点我觉得在理解题目到底想让你干什么上面!! 理解了以后用正则其实非常简单 这道题问的是上面那个字符串能不能完全代表下面那个字符串!! 这就是为什么例子里面z不能匹配zz的原因,因为z只能代表一个字符,而zz有俩字符。所以能代表zz的有z*,z?,zz,??,,,,****,*,**...。 i 展开全文
头像 FifteenthOfJuly
发表于 2020-05-28 15:36:08
我承认我有投机取巧的成分,但是用正则表达式来做的话会很简单。暂且就认为测试用例和题目上的差不多,正则表达式中只含有"? * ."这三种,将其替换为对应的就可以了。 import java.util.Scanner; /** * 实现通配符 * ? 匹配一个字符 [0-9A-Za-z]{1} 展开全文
头像 牛客782612709号
发表于 2022-01-23 10:32:22
递归方法 新手。讨论区大佬们直接上代码的多,看代码逆推思路so吃力。 好在力扣上找到了详细思路(力扣第44题),梳理半天,终于敲出来了。记录如下: 匹配逻辑 从右向左识别符号,通配符p可能有三种类型: 1.普通字符 2.? 3.* 前两种情况可以合并为检查字符串s(n-2) 与通配符 p(m-2) 展开全文
头像 WIliCai
发表于 2021-12-06 18:09:43
采用动态规划,去看力扣44题就知道 怎么做了 import java.io.*; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br=n 展开全文
头像 牛客412602128号
发表于 2021-10-30 21:44:34
import re while True: try: s1 = input().lower() s2 = input().lower() s1 = s1.replace('.', '\.').replace('?', '[0-9a-z]').r 展开全文
头像 我心态贼好
发表于 2020-08-01 09:25:15
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNe 展开全文
头像 BSF
发表于 2021-10-22 01:13:55
def match(p, s): m, n = len(p), len(s) ''' 初始化边界: 1、dp[0][0] = True,空模式空字符串,匹配成功; 2、dp[0][j] = False,空模式无法匹配非空字符串; 展开全文