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

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

1.题目描述

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

2.解法分析

递归解就好了

class Solution {
public: bool isMatch(const char *s, const char *p) {
// Start typing your C/C++ solution below // DO NOT write int main() function if(s==NULL&&p==NULL)return true; else if(s==NULL||p==NULL)return false; return __isMatch(s,p,0,0); } bool __isMatch(const char *s, const char *p ,int sFront, int pFront) {
if(s[sFront]=='\0'&&p[pFront]=='\0')return true; else if(p[pFront]=='\0')return false; if(s[sFront]=='\0') {
if(p[pFront+1]=='*') return __isMatch(s,p,sFront, pFront+2); else return false; } //模式串首字符字符为普通字符 if(p[pFront]!='.'&&p[pFront]!='*') {
//模式串第二个字符不是‘*’,需严格匹配 if(p[pFront+1]!='*') {
if(p[pFront]==s[sFront])return __isMatch(s,p,sFront+1,pFront+1); else return false; } else//模式串第二个字符为'*' {
//若源串第一个字符与模式串第一个字符相同,则考虑是否匹配源串这个字符,若不相同,源串首字符不匹配 if(p[pFront]==s[sFront])return __isMatch(s,p,sFront,pFront+2)||__isMatch(s,p,sFront+1,pFront); else return __isMatch(s,p,sFront,pFront+2); } } //模式串首字符为'.'的分析大体同模式串首字符为普通字符的情况 if(p[pFront]=='.') {
if(p[pFront+1]!='*') {
return __isMatch(s,p,sFront+1,pFront+1); } else {
return __isMatch(s,p,sFront,pFront+2)||__isMatch(s,p,sFront+1,pFront); } } if(p[pFront]=='*')return false;//正常情况*字符不会裸露 } };

转载于:https://www.cnblogs.com/obama/p/3331589.html

你可能感兴趣的文章
BZOJ 4025: 二分图
查看>>
使用百度地图实现详细地址自动补全(补全bug''事件只能绑定到一个上的问题')...
查看>>
Emoji表情处理工具类
查看>>
刚刚考过dev401,出去玩了!有时间我把题目给大家贴出来。
查看>>
不等式解法训练题
查看>>
JavaScriptResult用法
查看>>
Hibernate(一)初始Hebirnate
查看>>
unity_ UI
查看>>
loj#6437. 「PKUSC2018」PKUSC(计算几何)
查看>>
CF1110G Tree-Tac-Toe(博弈论)
查看>>
iOS 百度地图大头针使用
查看>>
Linux 源码编译Python 3.6
查看>>
Hibernate-ORM:01.Hibernate恍如隔世般初见
查看>>
更新数据+获取行号+某行记录的地址+from字句
查看>>
goto,null
查看>>
the way of reading English books
查看>>
文本超出部分省略(包括多行文本超出部分省略显示)
查看>>
MongoDB数据库索引
查看>>
jq 操作表单中 checkbox 全选 单选
查看>>
高并发和大流量解决方案@year12
查看>>