正则表达式匹配

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

leetcode第十题,拿C++写的时候发现初始化数组如果只写一个值是不行的,其他元素的内存是脏的,需要写成 {} 方能初始化为默认值。

这道题用的是动态编程,确认最优子结构即可,topdown或者 bottomup都可以。

两个字符串 s 和 p,子问题就是是否子字符串也匹配,注意,s[0]可以不和p[0]匹配。粗略看,假设s长度为lenS,p长度为lenP,那么算法的时间复杂度应该是O(lenS*lenT) - O(n**2)。

todo:自定向下的方法,自底向上的方法,纯递归就不写了。

设置一个表 memo[lenS+1][lenP+1] 来记录子字符串s[i:lenS],其中 i in range(0, lenS)。

设空字符串与空字符串默认匹配,即s[lenS:]与 p[lenP:] 是匹配的,作为哨兵。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 正则表达式在 js 中的应用主要用到3个方法 exec():为指定的一段字符串执行搜索匹配操作。它的返回值是一个数...
    稀里糊涂姑娘阅读 25,202评论 1 3
  • 前提是朋友有个需求帮忙,集成百度地图得出了公交路线方案(字符串),但只需要路线方案的公交路数。第一时间就考虑了字符...
    huifeidelele阅读 2,683评论 0 2
  • 今天在写一个项目的时候用到了正则表达式;将正则表达式与字典中的 key 进行匹配,并将匹配到的字符串用 key 对...
    TobyoTenma阅读 15,956评论 0 33
  • 吾本秦岭游山客,乌帽青衣,畅行关中地。 落尽黄叶秋寒气,芳草萋萋愁迷离。 坐望平畴念娇媚,日暮青山,幽思欲憔悴。 ...
    邓文伟阅读 257评论 0 1
  • 孔夫子深得当官之味,有人质疑他的专业知识,他立刻就表示我这样做才表明具备了专业能力。 一则表示事必躬亲,什么都仔细...
    海水蓝阅读 195评论 0 0