码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode解题报告:44 Wildcard Matching

时间:2015-03-31 01:03:35      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:leetcode

问题描述:

给定字符串s与模式串p,其中p中的‘?‘可以匹配任意单个字符,‘*‘可以匹配任意字符串(包括空串),判断模式串是否匹配字符s全部(不是部分)。


例子:

isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false


思路:动态规划

  • 字符串s: s1s2...sm 模式串p: p1p2...pn

  • 递归子问题:如果sm与pn相同或者pn是‘?‘,那么问题归为判断s1s2...sm-1与p1p2...pn-1是否匹配。如果pn为‘*‘,如果‘*‘匹配空串,那么问题归为判断s1s2...sm与p1p2...pn-1是否匹配,如果‘*‘不匹配空串,那么问题归为s1s2...sm-1与p1p2...pn是否匹配子问题。

  • 终止条件:当字符串s为空时,如果p为空或者p中都是‘*‘返回真,否则返回假。


代码:Python

record_dir = {}
def isMatch(s, p):
   key = ‘%s:%s‘ % (s, p)
   if key in record_dir:
       return record_dir[key]
   ret = False
   if len(s) == 0:
       if len(p) == 0 or (p[0] == ‘*‘ and len(set(p)) == 1):
           ret = True
   elif len(p) == 0:
       ret = False
   elif s[-1] == p[-1] or p[-1] == ‘?‘:
       ret = isMatch(s[0:-1], p[0:-1])
   elif p[-1] == ‘*‘:
       if isMatch(s, p[0:-1]):
           ret = True
       else:
           ret = isMatch(s[0:-1], p)
   record_dir[key] = ret
   return ret;


本文出自 “8339141” 博客,请务必保留此出处http://8349141.blog.51cto.com/8339141/1626616

leetcode解题报告:44 Wildcard Matching

标签:leetcode

原文地址:http://8349141.blog.51cto.com/8339141/1626616

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!