码迷,mamicode.com
首页 > 其他好文 > 详细

Regular Expression Matching

时间:2017-05-19 11:16:01      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:src   ==   ble   ref   完全   amp   empty   regular   img   

10. Regular Expression Matching

题目链接:https://leetcode.com/problems/regular-expression-matching/#/description

题目大意:实现一个正则表达式匹配函数。该正则表达式支持‘.‘和‘*‘。其中‘.‘匹配任意的单个字符,‘*‘匹配0个或多个前一个字符。函数参数为两个字符串s和p,如果s可以被p完全匹配,则返回true,否则返回false。

 

思路:可以对多种情况进行分类讨论。1、如果p为空字符串,则直接判断s是否为空即可;2、p不为空,且p只包含一个字符,完全匹配的条件为s与p相等或者s只包含一个字符,且p[0]==‘.‘;3、p.size()>=2且p[1]==‘*‘,因为‘*‘匹配0个或多个前一个字符,所以s与p是否匹配可以转换为:(1)s与p.substr(2)是否匹配,这时‘*‘匹配0个前一个字符;(2)s.substr(1)与p是否匹配,这时‘*‘匹配多个前一个字符(前提条件是s[0]与p[0]匹配);4、p.size()>=2且p[1]!=‘*‘,完全匹配的条件为s不为空,s[0]与p[0]匹配且s.substr(1)与p.substr(1)匹配。

算法复杂度:时间复杂度为O(n),空间复杂度为O(n)。

代码:

 1 class Solution {
 2 public:
 3     bool isMatch(string s, string p) {
 4         if (p.empty())
 5             return s.empty();
 6         if (p.size() >= 2 && p[1] == *)
 7             return isMatch(s, p.substr(2)) || (!s.empty() && (s[0] == p[0] || p[0] == .) && isMatch(s.substr(1), p));
 8         else
 9             return !s.empty() && (s[0] == p[0] || p[0] == .) && isMatch(s.substr(1), p.substr(1));
10     }
11 };

评测系统上运行结果:

技术分享

 

Regular Expression Matching

标签:src   ==   ble   ref   完全   amp   empty   regular   img   

原文地址:http://www.cnblogs.com/gxhblog/p/6713360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!