首页 > 试题广场 >

正则表达式匹配

[编程题]正则表达式匹配
  • 热度指数:90543 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请实现一个函数用来匹配包括'.'和'*'的正则表达式。
1.模式中的字符'.'表示任意一个字符
2.模式中的字符'*'表示它前面的字符可以出现任意次(包含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配

数据范围:
1.str 只包含从 a-z 的小写字母。
2.pattern 只包含从 a-z 的小写字母以及字符 . 和 *,无连续的 '*'。
3.
4.


示例1

输入

"aaa","a*a"

输出

true

说明

中间的*可以出现任意次的a,所以可以出现1次a,能匹配上              
示例2

输入

"aad","c*a*d"

输出

true

说明

因为这里 c 为 0 个,a被重复一次, * 表示零个或多个a。因此可以匹配字符串 "aad"。              
示例3

输入

"a",".*"

输出

true

说明

".*" 表示可匹配零个或多个('*')任意字符('.')              
示例4

输入

"aaab","a*a*a*c"

输出

false
头像 不是江小白
发表于 2021-07-05 02:43:25
精华题解 1. 解题前的思考 一开始拿到这题,其实还挺懵逼的。🤣如果这题没有 ‘*’ (后面统一称呼为"星号”)这个字符在正则表达式中,这题将会简单点,我们只需要从左往右遍历字符串 看是否能跟 模式 '.' 匹配上即可。 无星号的正则表达式匹配代码部分: def match(self, str, 展开全文
头像 Maokt
发表于 2021-06-29 10:01:20
精华题解 算法思想一:递归 解题思路: 每次从字符串里取出一个字符与模式中的字符匹配,如果模式中的字符是‘.’,它可以匹配字符串中的任意字符,如果不是,那么如果它与字符串中的字符相等则匹配。当字符串的字符和模式的字符匹配时,接着匹配后面的字符。 下面,考虑模式中的第二个字符是不是‘*’。如果不是, 展开全文
头像 牛客题解官
发表于 2022-04-22 12:51:13
精华题解 题目主要信息: 一个正常字符串str,可能为空,只包含小写字母 一个模式串pattern,可能为空,只包含小写字母和‘*’与‘.’ 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次) 求str与pattern是否能完全匹配 举一反三: 学习完本题的思路你可以解 展开全文
头像 江南好___
发表于 2021-07-04 02:04:06
精华题解 描述 题目描述 请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab 展开全文
头像 宫水三叶的刷题日记
发表于 2021-07-26 14:51:48
动态规划 为了方便,使用 ss 代指 str,使用 pp 代指 pattern。 整理一下题意,对于字符串 p 而言,有三种字符: 普通字符:需要和 s 中同一位置的字符完全匹配 '.':能够匹配 s 中同一位置的任意字符 '*':不能够单独使用 '*',必须和前一个字符同时搭配使用,数据保证了 展开全文
头像 LifelongCode
发表于 2021-05-18 20:42:32
思路: 当模式中的第二个字符不是“*”时: 如果字符串第一个字符和模式中的第一个字符相匹配,那么字符串和模式都后移一个字符,然后匹配剩余的。 如果字符串第一个字符和模式中的第一个字符相不匹配,直接返回false。 当模式中的第二个字符是“*”时:2.1.如果字符串第一个字符跟模式第一个字 展开全文
头像 牛客786963925号
发表于 2021-07-31 17:42:52
解法一:动态规划 与此题类似,此题可以采用动态规划的方法来求解。定义二维递推数组dp,其中表示字符串str的前个字符与字符串pattern的前个字符是否匹配(设dp数组行、列分别为、,其中分别为字符串str和pattern的长度)。 「动态规划算法的关键是确定递推式」,对于此题有如下几种情况:(为方 展开全文
头像 embed_fgd
发表于 2021-03-05 15:15:33
参考剑指offer class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @param patte 展开全文
头像 xqxls
发表于 2021-07-21 20:08:15
题意整理 用模式串来检验整个匹配串。 模式串中的'.'匹配任何字符,'*'表示它前面的字符可以出现任意次(即0到无穷次)。 方法一(记忆化递归) 1.解题思路 递归终止条件:当模式串走完的时候,递归终止,如果此时,原串也走完了,则匹配成功;如果没走完,则匹配失败。 每一层递归从上一层获取什么: 展开全文
头像 小陆要懂云
发表于 2021-08-24 09:23:16
class Solution { bool matchCore(const string& str,const string& pattern){ if(str.empty()&&pattern.empty()) ret 展开全文
头像 2019113916
发表于 2021-08-13 17:43:39
方法一:递归 1.解题思路 题意:给定一个文本串和一个模式串,模式串中字符' . '表示任意一个字符,模式串中的' * '表示任意次' * '前字符,让我们判断文本串与模式串是否匹配,匹配返回true,不匹配返回false。 2.解法 采用递归方法,首先进行特判。 空文本串,空模式串,一定匹配 文 展开全文
头像 菜鸟也要飞的高
发表于 2021-07-05 00:23:27
题目描述 请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abac 展开全文
头像 M意
发表于 2022-02-12 11:15:04
一、递归 一、前提: 1、大问题变小问题 2、找到终止条件 二、如果把大问题变成小问题呢? 当前问题是str字符串和pattern字符串匹配 最小的情况是两边都为空, 其次是两边各有1个字符, 再其次是两边都有字符。 而以上最小的情况分两类,前两种情况可以作为终止条件,其中若str为空patt 展开全文
头像 designeer
发表于 2021-11-11 10:32:31
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # #  # @param str string字符串  # @param pattern string字符串  #& 展开全文