博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 10. Regular Expression Matching
阅读量:6673 次
发布时间:2019-06-25

本文共 2193 字,大约阅读时间需要 7 分钟。

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") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("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 
10 #include
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 char24 if (*(p + 1) != '*') {25 if ((*p == *s) || ((*p == '.') && (*s != '\0')))26 return isMatch(s + 1, p + 1);27 else28 return false;29 } else { // next char is '*'30 // '*' matches zero or more of the preceding element31 while ((*p == *s) || ((*p == '.') && (*s != '\0'))) {32 // check if the remaining string matches33 if (isMatch(s, p + 2))34 return true;35 // move point36 s ++;37 }38 // next matching39 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

 

转载于:https://www.cnblogs.com/pegasus923/p/7465236.html

你可能感兴趣的文章
获取n!的末尾有多少个0?
查看>>
使用递归遍历并转换树形数据(以 TypeScript 为例)
查看>>
windows下实现wamp与tomcat环境整合
查看>>
我的友情链接
查看>>
Windows Server 2012 R2搭建IIS服务器
查看>>
SCVMM 2012 R2运维管理二之:安装域控制器
查看>>
[Fibre Channle 实战之三]FC 和iSCSI的使用差异
查看>>
c#winform选择文件,文件夹,打开指定目录方法
查看>>
traceroute
查看>>
如何划分man文档的章节
查看>>
微信公众号的分类
查看>>
分布式高可用存储(drbd+corosync+pacemaker+MooseFS)
查看>>
Nginx+Lua+Redis连接池
查看>>
MySQL python 数据迁移脚本
查看>>
我的友情链接
查看>>
网站运维常用小技巧,排错必备
查看>>
Python中MySQLdb模块的安装
查看>>
windows下的grep
查看>>
find 详解
查看>>
【书签】valgrind - the dynamic analysis tools
查看>>