面试19题:

题目:正则表达式匹配

题:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。

解题思路:需要仔细考虑各种可能的情况,具体参见代码注释。

解题代码:

# -*- coding:utf-8 -*-
class Solution:
# s, pattern都是字符串
def match(self, s, pattern):
# write code here
if len(s)==0 and len(pattern)==0:
return True
if len(s)>0 and len(pattern)==0:
return False
# 当模式中的第二个字符是"*"时
if len(pattern)>1 and pattern[1]=="*":
#如果字符串第一个模式跟模式第一个字符匹配(相等或匹配到"."),可以有3种匹配方式:
if len(s)>0 and (s[0]==pattern[0] or pattern[0]=='.'):
# 1、模式后移2字符,相当于X*被忽略
# 2、字符串后移1字符,模式后移两字符;
# 3、字符串后移1字符,模式不变,即继续匹配字符下一位,因为*可以匹配多位
return self.match(s, pattern[2:]) or self.match(s[1:],pattern[2:]) or self.match(s[1:],pattern) else:
return self.match(s,pattern[2:]) # 当模式中的第二个字符不是"*"时:
#1、如果字符串第一个字符和模式中的第一个字符匹配(相等或匹配到"."),那么字符串和模式都后移一个字符,然后匹配剩余的
if len(s) > 0 and (s[0] == pattern[0] or pattern[0] == '.'):
return self.match(s[1:],pattern[1:])
#2、如果字符串第一个字符和模拟中的第一个字符相不匹配,直接返回false
return False

最新文章

  1. Linux crontab执行bash脚本
  2. python 函数传递参数的多种方法
  3. 基于XMPP协议的Android即时通信系
  4. 什么是CPA, CPS, CPT?
  5. linux下Nginx 安装配置
  6. android Shader类简介_渲染图像示例
  7. C#_socket拆包_封包_模拟乱序包
  8. C#实现仿QQ震动
  9. Magento2 可配置产品解决SKU流程
  10. SAP主数据文件版本号命名规范
  11. Java设计模式----中介者模式
  12. Docker实践:python应用容器化
  13. IDEA报错: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.datasource.url' in value "${spring.datasource.url}"
  14. Android 开发第二步——建立文件
  15. YII2中ActiveDataProvider与GridView的配合使用
  16. Windows7安装UBUNTU虚拟机
  17. python二叉树简单实现
  18. 奇妙的音乐-----WriteUp
  19. 购买小米成功 散分mhn
  20. Linux 内核同步之自旋锁与信号量的异同【转】

热门文章

  1. LINQ操作数组(交集,并集,差集,最值,平均,去重复)
  2. Triangulation by Ear Clipping(耳切法处理多边形三角划分)
  3. python模块学习之re
  4. 华为HiAI 助力苏宁易购,让你尽享完美视觉购物体验!
  5. LeetCode459. Repeated Substring Pattern
  6. 导入mysql文件提示“ASCII '\0' appeared in the statement”
  7. VLC Web插件的浏览器兼容性
  8. dynamic web project
  9. 第9章 Docker Swarm 相关问题
  10. SSH后台管理系统,实现查询+分页