博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
44. Wildcard Matching(dp、动态规划)
阅读量:5099 次
发布时间:2019-06-13

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

Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*'.

'?' Matches any single character.

'*' Matches any sequence of characters (including the empty sequence).

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

Note:

  • s could be empty and contains only lowercase letters a-z.
  • p could be empty and contains only lowercase letters a-z, and characters like ? or *.

Example 1:

Input:

s = "aa"
p = "a"
Output: false
Explanation: "a" does not match the entire string "aa".

Example 2:

Input:

s = "aa"
p = ""
Output: true
Explanation: '
' matches any sequence.

Example 3:

Input:

s = "cb"
p = "?a"
Output: false
Explanation: '?' matches 'c', but the second letter is 'a', which does not match 'b'.

Example 4:

Input:

s = "adceb"
p = "ab"
Output: true
Explanation: The first '' matches the empty sequence, while the second '' matches the substring "dce".

Example 5:

Input:

s = "acdcb"
p = "a*c?b"
Output: false

class Solution:    def isMatch(self, s, p):        """        :type s: str        :type p: str        :rtype: bool        """        dp = [[False for i in range(len(p)+1)] for j in range(len(s)+1)]        dp[0][0] = True        for i in range(len(p)):            if (p[i]=='*' and dp[0][i]):                dp[0][i+1] = True        for i in range(len(s)):            for j in range(len(p)):                if s[i]==p[j] or p[j]=='?':                    dp[i+1][j+1] = dp[i][j]                elif p[j]=='*':                    dp[i+1][j+1] = dp[i+1][j] or dp[i][j+1]        return dp[-1][-1]

用bool型二维数组vvb[i][j]表示s的前i个字符和p的前j个字符是否匹配。

初始值,vvb[0][0]为true,vvb[0][j]的值取决于p前一个位置是否为‘*’以及前一情况是否匹配。

当p[j]等于‘?’或者s[i]等于p[j]时,则vvb[i][j]的值取决于vvb[i-1][j-1],即为s的前一位置和p的前一位置是否匹配;

当p[j]等于‘’时,如果该‘’可以匹配s中的0个或者1个字符,分别对应vvb[i][j-1],即s的当前位置和p的前一位置是否匹配,以及vvb[i-1][j-1],即s的前一位置和p的前一位置是否匹配。

转载于:https://www.cnblogs.com/bernieloveslife/p/9794821.html

你可能感兴趣的文章
H3C ICMP
查看>>
Python Numpy 介绍
查看>>
printcap - 打印机相容性数据库
查看>>
LINUX超级用户(权限)在系统管理中的作用
查看>>
iOS动画(一)coreAnimation 教程(转)
查看>>
Github 如何上传本地文件
查看>>
dos命令操作一 基本篇
查看>>
element对象
查看>>
Android SQLite (一) 数据库简介
查看>>
HashMap和HashSet的区别
查看>>
python-2:基础点滴 字符串函数之一 str
查看>>
ASP.NET MVC 5 入门教程 (1) 新建项目
查看>>
MySQL复习1
查看>>
线程、线程ID获取
查看>>
Mysql 中的事件 事件调度器(Event Scheduler)
查看>>
安装XAMPP时出现 unable to realloc 83886080 bytes
查看>>
ZJOI2007 矩阵游戏
查看>>
为什么用多个域名来存储网站资源会更有效
查看>>
基于RStudio 实现数据可视化之二
查看>>
redis面试总结
查看>>