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

本文共 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

你可能感兴趣的文章
【实验报告】实验二:DHCP基本实验
查看>>
气质的培养(哈佛管理世界)
查看>>
Can&#39;t get Kerberos realm
查看>>
正则表达式 学习笔记1.1
查看>>
通过案例学调优之--AWR BaseLine管理
查看>>
如何使用MySQL提升权限
查看>>
keepalived 原理,安装,配置
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
GitHub 版本控制 项目托管 00 总体框架
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
使用NTFS权限保护数据安全
查看>>
infortrend ESDS RAID6故障后的数据恢复方案
查看>>
【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)
查看>>