1. 题目
读题
考查点
2. 解法
思路
代码逻辑
具体实现
自行实现
public class WildcardMatching {
// 判断 pattern 是否匹配 str
public static boolean match(String pattern, String str) {
int n = pattern.length();
int m = str.length();
boolean[][] dp = new boolean[n + 1][m + 1]; // dp[i][j] 表示 pattern 前 i 个字符和 str 前 j 个字符是否匹配
dp[0][0] = true; // 空字符串匹配空字符串
for (int i = 1; i <= n; i++) {
char ch1 = pattern.charAt(i - 1); // pattern 的第 i 个字符
dp[i][0] = dp[i - 1][0] && (ch1 == '*'); // 如果 pattern 只有 * 可以匹配空字符串
for (int j = 1; j <= m; j++) {
char ch2 = str.charAt(j - 1); // str 的第 j 个字符
if (ch1 == '*') {
// * 可以匹配任意长度的字符串,包括空字符串
dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
} else if (ch1 == '?') {
// ? 可以匹配任意一个字符
dp[i][j] = dp[i - 1][j - 1];
} else {
// 如果 ch1 不是 * 或 ?,则需要和 ch2 相同才能匹配成功
dp[i][j] = dp[i - 1][j - 1] && (ch1 == ch2);
}
}
}
return dp[n][m]; // 返回最终的匹配结果
}
public static void main(String[] args) {
String pattern = "Te*";
String str = "Test Test";
System.out.println(match(pattern, str)); // 输出 true
}
}