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

LeetCode 10. Regular Expression Matching

时间:2017-09-01 23:10:59      阅读:403      评论:0      收藏:0      [点我收藏+]

标签:str   sts   ide   rip   reserve   cpp   name   技术分享   should   

https://leetcode.com/problems/regular-expression-matching/description/

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

  • 字符串匹配。最后一个样例中匹配是因为*可以是0次匹配,i.e. c0a2b。
  • 递归法或者动态规划。
技术分享
 1 //
 2 //  main.cpp
 3 //  LeetCode
 4 //
 5 //  Created by Hao on 2017/3/16.
 6 //  Copyright © 2017年 Hao. All rights reserved.
 7 //
 8 
 9 #include <iostream>
10 #include <string>
11 using namespace std;
12 
13 class Solution {
14 public:
15     bool isMatch(string s, string p) {
16         return isMatch(s.c_str(), p.c_str());
17     }
18 
19 private:
20     bool isMatch(const char *s, const char *p) {
21         if (*p == \0) return *s == \0;
22         
23         // next char is not ‘*‘, must match the current char
24         if (*(p + 1) != *) {
25             if ((*p == *s) || ((*p == .) && (*s != \0)))
26                 return isMatch(s + 1, p + 1);
27             else
28                 return false;
29         } else { // next char is ‘*‘
30             // ‘*‘ matches zero or more of the preceding element
31             while ((*p == *s) || ((*p == .) && (*s != \0))) {
32                 // check if the remaining string matches
33                 if (isMatch(s, p + 2))
34                     return true;
35                 // move point
36                 s ++;
37             }
38             // next matching
39             return isMatch(s, p + 2);
40         }
41     }
42 };
43 
44 int main ()
45 {
46     Solution testSolution;
47     string sTest[] = {"aa", "a", "aa", "aa", "aaa", "aa", "aa", "a*", "aa", ".*", "ab", ".*", "aab", "c*a*b"};
48 
49     for (int i = 0; i < 7; i ++)
50         cout << testSolution.isMatch(sTest[2 * i], sTest[2 * i + 1]) << endl;
51     
52     return 0;
53 }
View Code

 

LeetCode 10. Regular Expression Matching

标签:str   sts   ide   rip   reserve   cpp   name   技术分享   should   

原文地址:http://www.cnblogs.com/pegasus923/p/7465236.html

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