东莞塘厦做网站,seo怎么读,如果做微商需不需要开个网站。,wordpress third主题44. 通配符匹配
给定一个字符串 (s) 和一个字符模式 #xff0c;实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。
? 可以匹配任何单个字符。
* 可以匹配任意字符串#xff08;包括空字符串#xff09;。
两个字符串完全匹配才算匹配成功。说明:
s 可能为空#xff0c;且…44. 通配符匹配
给定一个字符串 (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
数组定义
dp[i][j]代表s的前i个字符和p的前j个字符能否匹配
初始化
因为*可以匹配空字符串所以在s的前部分只要是连续 *就能一直匹配空字符串
状态转移
p.charAt(j-1)’?’||p.charAt(j-1)s.charAt(i-1) 说明当前遍历的两个字符可以直接匹配直接由dp[i-1][j-1]转移过来p.charAt(j-1)’*’
*可以当成空字符串所以可以由dp[i][j-1]转移而来在遍历i-1的时候*可能会变为一个通配字符串使得s的i-1个字符和p的j个字符匹配而 *是可以匹配任意字符串的所以我们可以修改通配的字符串使得第i个字符也在这个通配字符串里面结果就从dp[i-1][j]转移而来
代码
class Solution {public boolean isMatch(String s, String p) {int ns.length(),mp.length();boolean[][] dpnew boolean[n1][m1];dp[0][0]true;for(int i1;im;i){if(p.charAt(i-1)*){dp[0][i]true;}else break;}for(int i1;in;i)for(int j1;jm;j){if(p.charAt(j-1)?||p.charAt(j-1)s.charAt(i-1))dp[i][j]dp[i-1][j-1];else if(p.charAt(j-1)*){dp[i][j]dp[i-1][j] | dp[i][j-1];}}return dp[n][m];}
}