建自己博客网站,哪个平台可以免费打广告,页面编辑wordpress,头像生成器在线制作给定一个字符串 (s) 和一个字符模式 (p) #xff0c;实现一个支持 ? 和 * 的通配符匹配。
? 可以匹配任何单个字符。 * 可以匹配任意字符串#xff08;包括空字符串#xff09;。 两个字符串完全匹配才算匹配成功。
说明:
s 可能为空#xff0c;且只包含从 a-z 的小写…给定一个字符串 (s) 和一个字符模式 (p) 实现一个支持 ? 和 * 的通配符匹配。
? 可以匹配任何单个字符。 * 可以匹配任意字符串包括空字符串。 两个字符串完全匹配才算匹配成功。
说明:
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 *a*b 输出: true 解释: 第一个 * 可以匹配空字符串, 第二个 * 可以匹配字符串 dce. 示例 5:
输入: s acdcb p a*c?b 输入: false
思路和leetcode10差不多只不过这个*可以代表任意字符并且和前一个字符没关系dp式子好推很多。
class Solution {public boolean isMatch(String s,String p){if (s null || p null)return false;int sLens.length();int pLenp.length();boolean[][] dp new boolean[sLen 1][pLen 1];dp[0][0] true;//dp[i][j] 表示 s 的前 i 个是否能被 p 的前 j 个匹配for (int j1;jpLen;j)dp[0][j]p.charAt(j-1)* dp[0][j-1];for (int i 0; i sLen; i) {for (int j 0; j pLen; j) {//单个字符可以匹配if (p.charAt(j) ? || p.charAt(j) s.charAt(i)) dp[i 1][j 1] dp[i][j];//多个字符if (p.charAt(j) *) {dp[i1][j1]dp[i1][j] || //*代表0个dp[i][j1]; //代表多个}}}return dp[sLen][pLen];}
}