【算法题】44. 通配符匹配

题目

给你一个输入字符串 (s) 和一个字符模式 (p) ,请你实现一个支持 '?' 和 '*' 匹配规则的通配符匹配:

'?' 可以匹配任何单个字符。

'*' 可以匹配任意字符序列(包括空字符序列)。

判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而不是部分匹配)。

示例 1:

输入:s = "aa", p = "a"

输出:false

解释:"a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:s = "aa", p = "*"

输出:true

解释:'*' 可以匹配任意字符串。

示例 3:

输入:s = "cb", p = "?a"

输出:false

解释:'?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。

提示:

0 <= s.length, p.length <= 2000

s 仅由小写英文字母组成

p 仅由小写英文字母、'?' 或 '*' 组成

题解

java 复制代码
class Solution {
    public boolean isMatch(String s, String p) {
        int m = s.length();
        int n = p.length();
        boolean[][] dp = new boolean[m + 1][n + 1];
        dp[0][0] = true;
        for (int i = 1; i <= n; ++i) {
            if (p.charAt(i - 1) == '*') {
                dp[0][i] = true;
            } else {
                break;
            }
        }
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (p.charAt(j - 1) == '*') {
                    dp[i][j] = dp[i][j - 1] || dp[i - 1][j];
                } else if (p.charAt(j - 1) == '?' || s.charAt(i - 1) == p.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1];
                }
            }
        }
        return dp[m][n];
    }
}

来自力扣官方题解

相关推荐
A boy CDEF girl1 分钟前
【JavaEE】阻塞队列
java·开发语言·java-ee
302wanger2 分钟前
ARTS-算法-长度最小的子数组
算法
WanderInk3 分钟前
JavaWeb CRUD 与分页系统架构学习教程
java·后端·架构
_Djhhh6 分钟前
权限系统设计方案实践(Spring Security + RBAC 模型)
java·linux·数据库·spring
天上掉下来个程小白25 分钟前
开发环境搭建-06.后端环境搭建-前后端联调-Nginx反向代理和负载均衡概念
java·运维·spring boot·后端·nginx·负载均衡·苍穹外卖
lizz3127 分钟前
机器学习中的线性代数:奇异值分解 SVD
线性代数·算法·机器学习
试着生存28 分钟前
java根据List<Object>中的某个属性排序(数据极少,顺序固定)
java·python·list
_星辰大海乀29 分钟前
LinkedList 双向链表
java·数据结构·链表·list·idea
MSTcheng.32 分钟前
【C语言】动态内存管理
c语言·开发语言·算法
不去幼儿园36 分钟前
【启发式算法】Dijkstra算法详细介绍(Python)
人工智能·python·算法·机器学习·启发式算法·图搜索算法