Redian新闻
>
问一道LeeCode题目: regular expression matching
avatar
问一道LeeCode题目: regular expression matching# JobHunting - 待字闺中
H*l
1
题目在下面。
两个test case看起来是互相矛盾的,搞不清楚规则:
input expected
"ab", ".*c" false
input expected
"ab", ".*" true
我觉得这两个都应该是true才对啊。。。
Implement regular expression matching with support for '.' and '*'.
'.' Matches any single character.
'*' Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
The function prototype should be:
bool isMatch(const char *s, const char *p)
Some examples:
isMatch("aa","a") ? false
isMatch("aa","aa") ? true
isMatch("aaa","aa") ? false
isMatch("aa", "a*") ? true
isMatch("aa", ".*") ? true
isMatch("ab", ".*") ? true
isMatch("aab", "c*a*b") ? true
avatar
t*5
2
第一个是0-n个任意字符然后以c结尾
ab不是c结尾 所以false
avatar
H*l
3
那这样的话,example的第一个怎么解释呢?

【在 t********5 的大作中提到】
: 第一个是0-n个任意字符然后以c结尾
: ab不是c结尾 所以false

avatar
t*5
4
因为aa !=== a 所以是false
第一个例子没有使用通配符 必须要完全匹配才行
avatar
H*l
5
难道是说,要p能符合规则的转换成s ? 而不是p的一部分能符合规则的转换成s就可以?
那下面这个,为什么是true?
isMatch("aab", "c*a*b") ? true

【在 t********5 的大作中提到】
: 因为aa !=== a 所以是false
: 第一个例子没有使用通配符 必须要完全匹配才行

avatar
g*o
6
同问
好像跟 wildcard mathching 一题没区别
但那题
isMatch("aab", "c*a*b") ? false
avatar
g*o
7
知道为什么了
wildcard mathching
'*' Matches any sequence of characters (including the empty sequence).
"c*"一定是以c开头的字符串
所以isMatch("aab", "c*a*b") ? false
regular expression matching
'*' Matches zero or more of the preceding element.
"c*"可以是"","c","cc","ccc"...
所以isMatch("aab", "c*a*b") ? true

【在 g****o 的大作中提到】
: 同问
: 好像跟 wildcard mathching 一题没区别
: 但那题
: isMatch("aab", "c*a*b") ? false

avatar
t*5
8
可以这么说 或者说是 s 符合 p 的约束
这个你看一下基本的正则表达式概念就会很清楚~ 可以趁机学一下perl然后顺带学正则
最后的例子 c*a*b 表示可以0到多个c 后面跟0到多个a 最后以一个b结尾
所以aab符合这个约束 因为是 0个c 2个a 以1个b结尾

以?

【在 H*****l 的大作中提到】
: 难道是说,要p能符合规则的转换成s ? 而不是p的一部分能符合规则的转换成s就可以?
: 那下面这个,为什么是true?
: isMatch("aab", "c*a*b") ? true

avatar
H*l
9
我终于知道为什么了。。。
原来c*在一起表示0到无数个c
我一开始以为c和*是孤立的,c表示一个c,*单独表示0到无数个c

【在 t********5 的大作中提到】
: 可以这么说 或者说是 s 符合 p 的约束
: 这个你看一下基本的正则表达式概念就会很清楚~ 可以趁机学一下perl然后顺带学正则
: 最后的例子 c*a*b 表示可以0到多个c 后面跟0到多个a 最后以一个b结尾
: 所以aab符合这个约束 因为是 0个c 2个a 以1个b结尾
:
: 以?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。