[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 '? ...
随机推荐
- libevent for qt网络模块
libevent for qt网络模块,直接替换qt的select模型,支持epoll,select,pool.使用非常简单,无需修改以前的代码结构 最近在开发im服务器,需要大并发链接.QT默认的是 ...
- winform datagridview 添加行号。
private void dataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { private ...
- undefined reference to `png_set_longjmp_fn'
这个是在Linux上编译项目的时候,一个动态库层用到的一个函数实现未找到,即使我链接了libpng2也没有找到,原因是这个库老了一些,没有这个函数定义,需要链接更高版本的png库,CentOS上有了在 ...
- C语言的本质(33)——GCC编译器入门
GCC(GNU CompilerCollection,GNU编译器套装),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分.GCC原本作为GNU操作系 ...
- Android专项面试训练题(一)
1.下面不可以退出Activity的是?(D) A.finish() B.抛异常强制退出 C.System.exit(0) D.onStop() 解析: A, finish() 方法就是退出activ ...
- Unity3d修炼之路:载入一个预制体,然后为该对象加入组件,然后查找对象,得到组件。
#pragma strict function Awake(){ //载入一个预制体 资源必须在 Resources目录下 Resources.LoadLoad(); //载入后 必须演示样例化 Ga ...
- notepad++和gcc搭建语言环境
1,工具: Notepad++:http://pan.baidu.com/s/1sjlXl6X MinGW:http://pan.baidu.com/s/1qWyQ3lq 2,安装notepad++ ...
- 阿里云RDS导入服务器数据库 XtraBackup
如果是centos系统,默认会开启selinux 一定需关闭selinux 解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=dis ...
- Android服务端本地窗口FramebufferNativeWindow
Android窗口系统 我们知道Android系统采用OpenGL来绘制3D图形,OpenGL ES提供了本地窗口(NativeWindow)的概念,无论是在Android平台中还是其他平台中,只要实 ...
- android视频录制、另一部手机实时观看方案
最近调研android视频录制.另一部手机实时观看,大致有以下几种思路. 1. android手机充当服务器,使用NanoHTTPD充当服务器,另一部手机或者pc通过输入http://手机的ip:80 ...