leetcode 44. 通配符匹配-java实现
题目所属分类
DP问题
背包问题的变形
原题链接
给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。
‘?’ 可以匹配任何单个字符。
‘*’ 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
代码案例:输入:
s = “aa”
p = “a”
输出: false
解释: “a” 无法匹配 “aa” 整个字符串。
题解
class Solution {
public boolean isMatch(String s, String p) {
int m=s.length(),n=p.length();
boolean f[][]=new boolean[m+1][n+1];
s=" "+s; p=" "+p;
f[0][0]=true;
// for (int i = 1; i <= n; ++i) {
// if (p.charAt(i - 1) == '*') {
// dp[0][i] = true;
// } else {
// break;
// }
// }
for (int i = 0; i <= m; i++) {//f(0,j)是有意义的 p可以是*
for (int j = 1; j <= n; j++) {//p不能为空
if (p.charAt(j) == '*') {
f[i][j] = f[i][j - 1] || i != 0 &&f[i - 1][j];
} else {
f[i][j] = (s.charAt(i) == p.charAt(j) ||p.charAt(j) == '?') && i != 0 && f[i - 1][j - 1];
}
}
}
return f[m][n];
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)