博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手动实现.*正则表达式匹配函数
阅读量:6479 次
发布时间:2019-06-23

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

手动实现.*正则表达式匹配函数

regular expression matching

  • '.' Matches any single character.

  • '*' Matches zero or more of the preceding element.

  • The matching should cover the entire input string (not partial).

Some examples:

isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → trueisMatch('bbbba', '.*a*a') → trueisMatch('a', '.*..a*') → FalseisMatch('a', 'ab*') → true isMatch('ab', '.*c') → False

思路

  1. 使用迭代,当p[1] != '*'每次判断p[0] == s[0]后令s = s[1:], p = p[1:]

  2. p[1] == '*'时特殊处理,注意 * 可以代表0到多个*之前一个的字符

  3. p[1] == '*'时,循环判断*代表多少个*之前一个的字符,如果s可以匹配*之后的模式,返回True,否则s = s[1:]

  4. 注意处理边界值的情况,sp为空串时

代码

class Solution(object):    def matchChar(self, sc, pc):        return sc == pc or pc == '.'    def isEndOfStar(self, p):        while p != '':            if len(p) == 1 or len(p) > 1 and p[1] != '*':                return False            p = p[2:]        return True    def isMatch(self, s, p):        if p == '':            return s == ''        if s == '':            return self.isEndOfStar(p)        if (len(p) > 1 and p[1] != '*') or len(p) == 1:            # without *            if not self.matchChar(s[0], p[0]):                return False            else:                return self.isMatch(s[1:], p[1:])        else:            # with *            # try see x* is empty            if self.isMatch(s[0:], p[2:]):                return True            # x* 可以 代表 x 一到多次            while self.matchChar(s[0], p[0]):                s = s[1:]                if self.isMatch(s, p[2:]):                    return True                if s == '':                    return self.isEndOfStar(p)            return False

本题以及其它leetcode题目代码github地址:

转载地址:http://hiwuo.baihongyu.com/

你可能感兴趣的文章
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>
阻塞非阻塞异步同步 io的关系
查看>>
ClickStat业务
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
我的路上
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>
Picasa生成图片幻灯片页面图文教程
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
Security updates and resources
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>