发布网友 发布时间:2022-03-22 17:28
共1个回答
热心网友 时间:2022-03-22 18:57
摘要给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = ""输出: true解释: '’ 可以匹配任意字符串。示例 3:输入:s = “cb”p = “?a”输出: false解释: ‘?’ 可以匹配 ‘c’, 但第二个 ‘a’ 无法匹配 ‘b’。示例 4:输入:s = “adceb”p = “ab”输出: true解释: 第一个 ‘’ 可以匹配空字符串, 第二个 '’ 可以匹配字符串 “dce”.示例 5:输入:s = “acdcb”p = “a*c?b”输出: false题目分析:这道题和之前做过的一道正则表达式匹配不同的是,p的每个字符是独立的,不依赖于前面的字符,自然的想法是暴力枚举,可能性实在很多,我们可以使用dp边记录边更新来做。那么状态转移方程为什么?先不考虑边界,如果Si与Pj相等,那么dp[i][j] = dp[i-1][j-1];如果Pj为?时,因为它可以匹配任何单个字符串,同样有dp[i][j] = dp[i-1][j-1];Pj为星号时,则分为匹配这个星号还是不用,若是使用,则dp[i][j] = dp[i-1][j],若是不用,则为dp[i][j] = dp[i][j-1];基本就是这三种状态,接下来就是边界条件的问题了。如果S与P均为空,一定是true,如果P为空,一定为false,如果S为空,由于S与P是要完全匹配的,那么此时的P的开头只能为 * 并且只能包含 *,才能为true,其余为false。代码:打开CSDN,阅读体验更佳Leetcode 44:通配符匹配(超详细的解法!!!)给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹咨询记录 · 回答于2021-12-14通配符是在什么条件格式下输入的A中文,β数值C英文,D文本给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = ""输出: true解释: '’ 可以匹配任意字符串。示例 3:输入:s = “cb”p = “?a”输出: false解释: ‘?’ 可以匹配 ‘c’, 但第二个 ‘a’ 无法匹配 ‘b’。示例 4:输入:s = “adceb”p = “ab”输出: true解释: 第一个 ‘’ 可以匹配空字符串, 第二个 '’ 可以匹配字符串 “dce”.示例 5:输入:s = “acdcb”p = “a*c?b”输出: false题目分析:这道题和之前做过的一道正则表达式匹配不同的是,p的每个字符是独立的,不依赖于前面的字符,自然的想法是暴力枚举,可能性实在很多,我们可以使用dp边记录边更新来做。那么状态转移方程为什么?先不考虑边界,如果Si与Pj相等,那么dp[i][j] = dp[i-1][j-1];如果Pj为?时,因为它可以匹配任何单个字符串,同样有dp[i][j] = dp[i-1][j-1];Pj为星号时,则分为匹配这个星号还是不用,若是使用,则dp[i][j] = dp[i-1][j],若是不用,则为dp[i][j] = dp[i][j-1];基本就是这三种状态,接下来就是边界条件的问题了。如果S与P均为空,一定是true,如果P为空,一定为false,如果S为空,由于S与P是要完全匹配的,那么此时的P的开头只能为 * 并且只能包含 *,才能为true,其余为false。代码:打开CSDN,阅读体验更佳Leetcode 44:通配符匹配(超详细的解法!!!)给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹