题意:s是空串或包含a-z字母;

p为包含a-z字母或?或 * (其中*可以匹配任意字符串包括空串,?可以匹配任意字符)。

思路:

1)特殊情况:当s为空串时,p为连续 * 时,则连续 * 的位置都为true。

2)若p的第j个字符为 * ,分两种情况:

a)  若p中的前 j-1个字符和 s 中的前 i 个字符匹配成功了, 即 dp[i][j-1] == true , 因为 * 可以匹配空串,则 dp[i][j] == true;

b)  若p中的前 j 个字符和 s 中前 i-1 个字符匹配成功了,即 dp[i-1][j] == true , 因为 * 可以匹配任意字符串,则 dp[i][j] == true.

3)   若p中的第j个字符不是 * 时,则需要满足 dp[i-1][j-1] == true 和 s 中的第i个字符和p中的第j个字符相等, 即 s[i-1] == p[j-1], 或者 p中的第j个字符是问号, 即 p[j-1] == '?' 则 dp[i][j] == true.

注意:dp[][] 初始化申请空间大小要为 (m+1, n+1) ,因为dp[0][0] 为p和s为空串时候的情况。

dp如果用二维数组定义会超时!所以用二维vector。

注:s[i-1] 代表s中第i位字符。

class Solution {
public:
bool isMatch(string s, string p) { int m = s.size();
int n = p.size();
//dp[i][j]:s中前i个字符组成的子串和p中前j个字符组成的子串是否能匹配
//bool dp[m+1][n+1] = {false};
vector<vector<bool> > dp(m+, vector<bool>(n+, false));
//s,p都为空,返回0
dp[][] = true; //s为空, p为连续星号时,赋值为true
for(int i = ; i <= n; i++){
if(p[i-] == '*')
dp[][i] = dp[][i-];
} for(int i=; i<=m; i++){
for(int j=; j<=n; j++){
if(p[j-] == '*')
dp[i][j] = dp[i-][j] || dp[i][j-];
else
dp[i][j] = (s[i-]==p[j-] || p[j-] == '?') && dp[i-][j-];
}
}
return dp[m][n]; }
};

leetcode 44 字符匹配的更多相关文章

  1. Java实现 LeetCode 44 通配符匹配

    44. 通配符匹配 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字 ...

  2. [leetcode] 44. 通配符匹配(Java)(动态规划)

    44. 通配符匹配 动态规划 做动态规划很简单,三步走: 第一步,判断可否用动态规划做,即判断是否满足两个条件:①最优子结构,②重叠子问题.显然该题求s与p是否match,可由其字串层层分解上来. 我 ...

  3. LeetCode 44. 通配符匹配(Wildcard Matching)

    题目描述 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串完 ...

  4. [Leetcode 44]通配符匹配Wildcard Matching

    [题目] 匹配通配符*,?,DP动态规划,重点是*的两种情况 想象成两个S.P长度的字符串,P匹配S. S中不会出现通配符. [条件] (1)P=null,S=null,TRUE (2)P=null, ...

  5. [LeetCode] 44. Wildcard Matching 外卡匹配

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

  6. 第八周 Leetcode 44. Wildcard Matching 水题 (HARD)

    Leetcode 44 实现一种类似正则表达式的字符串匹配功能. 复杂度要求不高, 调代码稍微费点劲.. 好像跟贪心也不太沾边, 总之 *把待匹配串分成若干个子串, 每一个子串尽量在模式串中靠前的部分 ...

  7. Leetcode 10. 正则表达式匹配 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  8. Java实现 LeetCode 10 正则表达式匹配

    10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配, ...

  9. 【编程题目】有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配...

    37.(字符串)有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配,则两个字符串可以联接,问这 n 个字符串最多可以连成一个多长的字符串,如果出现循环, ...

随机推荐

  1. 协方差与pearson相关系数

    协方差 协方差大于0,表示两个随机变量正线性相关 协方差等于0,表示两随机变量无线性相关 协方差小于0,表示两随机变量负线性相关 协方差智能表示随机变量的线性相关关系,不能刻画其相关程度. 因此引入了 ...

  2. MemoryUsage:监测java虚拟机内存使用

    通过MemoryUsage可以查看Java 虚拟机的内存池的内存使用情况.MemoryUsage类有四个值(均以字节为单位): ===Init=== java虚拟机在启动的时候向操作系统请求的初始内存 ...

  3. RobotFramework学习-问题

    RobotFramework,基于Python的自动化测试框架.近期学习中遇到过一些问题. 1.运行ride时,报错[ ERROR ] option --monitorcolors not recog ...

  4. 路飞项目背景,contentType以及django缓存

    昨日回顾: 分页器: 普通分页 # 普通分页 from rest_framework.pagination import PageNumberPagination -每页的大小(默认) -查询的时候, ...

  5. Qt之生成pdf(转)

    Qt中如何让图片.文本.HTML或者其他形式的内容生成pdf呢?主要利用QPrinter来实现,QPrinter不止可以操作打印机来打印纸张文件,并且可以将文件保存至磁盘,存储为pdf格式的文件.   ...

  6. C++中的深拷贝和浅拷贝 QT中的深拷贝,浅拷贝和隐式共享

    下面是C++中定义的深,浅拷贝 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会 ...

  7. 自制Java中的Mutex类

    同步问题中,一个很重要的问题是同步的域,什么是同步的域呢?简单以 synchronized 这个关键字来说,就是它所同步的范围.并发编程中很多时候出现的问题没有选好同步范围所导致的.但现有的同步关键字 ...

  8. java学习(五)java类继承

    1.制作一个工具类的文档 javadoc -d 目录 -author -version   arrayTool.java 实例: class arrayDemo { public static voi ...

  9. java学习(一)数据类型

    一.java的安装及环境变量的配置 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...

  10. HDU 1496

    题目出处:HDU OJ 1496 http://acm.hdu.edu.cn/showproblem.php?pid=1496 为了练习Hash,特定采用了杭电自带的分类列表http://acm.hd ...