leetcode44
class Solution {
public boolean isMatch(String s, String p) {
if (p == null || p.length() == 0) {
return s == null || s.length() == 0;
}
boolean[][] dp = new boolean[s.length() + 1][p.length() + 1];
dp[0][0] = true;
int i, j; for (i = 1; i <= p.length(); i++) {
if (p.charAt(i - 1) == '*') {
dp[0][i] = true;
} else {
break;
}
} for (i = 1; i <= s.length(); i++) {
for (j = 1; j <= p.length(); j++) {
// the letter of p[j] exactly match with s[i] or is '?'
if (s.charAt(i - 1) == p.charAt(j - 1) || p.charAt(j - 1) == '?') {
dp[i][j] = dp[i - 1][j - 1];
} // the letter of p is '*'
if (p.charAt(j - 1) == '*') {
/*
* dp[i][j] = dp[i][j-1] means '*' act as empty card dp[i][j] = dp[i-1][j] means
* '*' act as wild card to match with s[i]
*/
dp[i][j] = dp[i][j - 1] || dp[i - 1][j];
}
}
}
return dp[s.length()][p.length()];
}
}
参考:https://leetcode.com/problems/wildcard-matching/discuss/429337/Java%3A-Wild-card!
补充一个python的实现:
class Solution:
def isMatch(self, s: str, p: str) -> bool:
m,n = len(s),len(p)
dp = [[False for _ in range(n+1)]for _ in range(m+1)]
dp[0][0] = True for j in range(1,n+1):
if p[j-1] == '*':
dp[0][j] = True
else:
break
for i in range(1,m+1):
for j in range(1,n+1):
if s[i-1] == p[j-1] or p[j-1] == '?':
dp[i][j] = dp[i-1][j-1]
elif p[j-1] == '*':
dp[i][j] = dp[i-1][j] or dp[i][j-1]
# print(dp)
return dp[m][n]
思路:动态规划。
举例分析:s='acdcb' p='a*c?b' 。s长度为m,p长度为n。
初始化二维数组dp,有m+1行,n+1列。
dp[0][0] = True,先设置第0行,如果p中对应字符是‘*’,则设置为True,遇到非'*'后面都设置为False。
从第1行开始,如果s与p中对应字符是相同或者p中是'?',则dp取其'左上角'元素的值。
如果p中的字符是'*',则dp判断其'上方'和'左侧'的逻辑或,(即上方或左侧是否为True)。
leetcode44的更多相关文章
- LeetCode44 Wildcard Matching
题目: Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single charact ...
- [Swift]LeetCode44. 通配符匹配 | Wildcard Matching
Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '? ...
- leetcode44:wildcard
44. Wildcard Matching 问题描述 给定字符串s和模式p,判断字符串s是否完全符合模式p 其中字符串s只包含小写字母,模式串p包含小写字母.*.?,其中星号表示任意长度的任意字符串, ...
- LeetCode--44 通配符匹配
题目就是说两个字符串,一个含有通配符,去匹配另一个字符串:输出两个字符串是否一致. 注意:’?’表示匹配任意一个字符,’*’表示匹配任意字符0或者多次 首先,我们想到暴力破解.如果从头到尾的破解,到第 ...
- Leetcode44. 通配符匹配(动态规划)
44. 通配符匹配 动态规划 \(f_{i,j}\)为\(s\)匹配\(i\),\(t\)匹配\(j\)是否成功 贪心 相比之下这个思维性更强 考虑两个*,两个星号间的过渡,只需要过渡完到第二个星号, ...
随机推荐
- JS和AS交互
这个话题在网上应该说很好找,有很多这方面的资料.比者也看过一些,不过大部分都是AS2与JS进行交互.很少提到AS3,即使有,也让人感觉浅尝辄止.很多东西并没有介绍的太清楚.所有笔者萌生了写这样一篇教程 ...
- Quartz不用配置文件配置启动
StdSchedulerFactory schedulerFactory = null; try { schedulerFactory = new StdSchedulerFactory(); Pro ...
- 【Spring学习笔记-3】国际化支持
[Spring]国际化支持 一.总体结构: 两个国际化资源中的内容: 二.程序 2.1 配置Spring上下文 beans.xml文件 <?xml version="1.0" ...
- vue之后台管理系统遇到的几个痛点
杂七杂八的一些日总结 1.vue(最)合理的处理表单提交和初始化表单数据显示的方式 对于表单处理,繁琐的一个地方就是当出现多个下拉选择的表单框的时候,我们需要进行多次将选择的文本去换对应的id值的操作 ...
- python "爬虫+有道词典"实现一个简单翻译程序
抓包软件使用的是Fiddler4 新版的查询接口 比较负责,引入了salt和sign http://fanyi.youdao.com/translate?smartresult=dict&sm ...
- 服务容错保护断路器Hystrix之三:断路器监控(Hystrix Dashboard)-单体监控
turbine:英 [ˈtɜ:baɪn] 美 [ˈtɜ:rbaɪn] n.汽轮机;涡轮机;透平机 一.Hystrix Dashboard简介 在微服务架构中为了保证程序的可用性,防止程序出错导致网络阻 ...
- java Files类和Paths类的用法 (转)
http://blog.csdn.net/u010889616/article/details/52694061 Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java. ...
- acl的基本知识点
#ACL acl number 3001 rule 1 deny udp destination-port eq 445 rule 2 deny tcp destination-por ...
- logging模块知识点及应用小结
Logging模块知识点: 一.分为5个级别:debug(),info(),warning(),error(),critical().级别由低到高 1.1最简单的用法: 1.2 如果想把日志写到文件 ...
- 视角同步NewViewTarget
SetViewTargetwithBlen说明: http://api.unrealengine.com/INT/BlueprintAPI/Game/Player/SetViewTargetwithB ...