[Leetcode][Python]44:Wildcard Matching
# -*- coding: utf8 -*-
'''
__author__ = 'dabay.wang@gmail.com' 44:Wildcard Matching
https://oj.leetcode.com/problems/wildcard-matching/ '?' Matches any single character.
'*' Matches any sequence of characters (including the empty sequence).
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", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false ===Comments by Dabay===
使用动态规划的做法.
先想象在s和p的前面都加一个空格,以s为外循环,p为内循环。
先初始化第一组数据,第一个“空”匹配“空”,所以第一个为True。然后看如果后面如果是*就继续设置为True。 进入循环之后,判断根据p中的字符
- 如果是?*以外的字符,就判断这个字符和s中对应的字符是否一致,而且s中到上一个字符和p中到上一次字符匹配,设True
- 如果是?,如果s中到上一个字符和p中到上一个字符匹配,设True
- 如果是*,满足下面的情况,就设True
- (匹配0次)s中到这个字符和p到上两个字符匹配
- (匹配1次)s中到这个字符和p到上一个字符匹配
- (匹配n次)s中到上一个字符和p到这个字符匹配
''' class Solution:
# @param s, an input string
# @param p, a pattern string
# @return a boolean
def isMatch(self, s, p):
def quick_test(s, p):
num_of_star = 0
for x in p:
if x == "*":
num_of_star = num_of_star + 1
return len(s) >= len(p)-num_of_star if quick_test(s, p) is False:
return False
default_row = [False] + [False for _ in p]
current_row = list(default_row)
current_row[0] = True
for j in xrange(len(p)):
if p[j] == "*":
current_row[j+1] = True
else:
break
previous_row = current_row
for i in xrange(len(s)):
current_row = list(default_row)
for j in xrange(len(p)):
if p[j] == "?":
if previous_row[j]:
current_row[j+1] = True
elif p[j] == "*":
if current_row[j] or previous_row[j] or previous_row[j+1]:
current_row[j+1] = True
else:
if p[j] == s[i] and previous_row[j]:
current_row[j+1] = True
previous_row = current_row
return previous_row[-1] def main():
sol = Solution()
s = "ac"
p = "ab*"
print sol.isMatch(s, p) if __name__ == "__main__":
import time
start = time.clock()
main()
print "%s sec" % (time.clock() - start)
[Leetcode][Python]44:Wildcard Matching的更多相关文章
- LeetCode(44) Wildcard Matching
题目 Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single characte ...
- [LeetCode]题解(python):044-Wildcard Matching
题目来源: https://leetcode.com/problems/wildcard-matching/ 题意分析: 定义两个新字符规则,'?'代表任意一个字符,’*‘代表任意长度的任意字符.输入 ...
- LeetCode第[44]题(Java):Wildcard Matching
题目:通配符匹配 难度:hard 题目内容: Given an input string (s) and a pattern (p), implement wildcard pattern match ...
- [Leetcode][Python][DP]Regular Expression Matching
# -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/regular-expression-matching/ Implement reg ...
- 每日算法之三十五:Wildcard Matching
模式匹配的实现,'?'代表单一字符,'*'代表随意多的字符.写代码实现两个字符串是否匹配. Implement wildcard pattern matching with support for ' ...
- leetcode 第43题 Wildcard Matching
题目:(这题好难.题目意思类似于第十题,只是这里的*就是可以匹配任意长度串,也就是第十题的‘.*’)'?' Matches any single character. '*' Matches any ...
- [LeetCode][Python]15:3Sum
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 15: 3Sumhttps://oj.leetcode.com/problem ...
- LeetCode 044 Wildcard Matching
题目要求:Wildcard Matching Implement wildcard pattern matching with support for '?' and '*'. '?' Matches ...
- [LeetCode] 44. Wildcard Matching 外卡匹配
Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '? ...
随机推荐
- JSON数据解析——jsoncpp的使用
版权所有,转载请注明:http://blog.sina.com.cn/u/1978765352 由于工作中需要用到JSON数据,所以解析JSON数据就成了一个非常重要的工作内容. 其实用C++解析数据 ...
- UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>
D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- canvas动画文字效果
Doughnut Chartvar c=document.getElementById("canvas");var ctx=c.getContext("2d") ...
- iOS openURL方法实现打电话、发短信、发邮件、打开其他App
UIApplication有个功能十分强大的openURL:方法 - (BOOL)openURL:(NSURL*)url; 通过这个方法,我们可以实现: 先获取 UIApplication UIApp ...
- poj1664 放苹果(递归)
转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1664 ------ ...
- 【贪心】【Uva11292】 勇者斗恶龙
直接用白书上的翻译吧 例题1 勇者斗恶龙(The Dragon of Loowater, UVa 11292) 你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士 ...
- 监控代码运行时长 -- StopWatch用法例程
在.net环境下,精确的测量出某段代码运行的时长,在网络通信.串口通信以及异步操作中很有意义.现在做了简单的总结.具体代码如下: (1).首先 using System.Diagnostics; (2 ...
- window服务创建
第一步:创建服务 第二步:在Service1.cs视图中 右键 选择”添加安装程序” 这里要注意几个细节 设置上面的属性 这两个分别有属性,具体网上查使用方式 3 实例代码编写 主要下面几个方法 pr ...
- 自定义view(自定义view的时候,三个构造函数各自的作用)
package com.timeshare.tmband.Utils; import android.content.Context; import android.content.res.Typed ...
- differ比较两个字符串的差异
"abcde","abdefk" ---->-c,+f,+k "aba","aababb" -----&g ...