lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

读题

HJ71 字符串通配符 

 

考查点

 

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
    }
}

 

3. 总结

posted on 2023-07-27 14:29  白露~  阅读(96)  评论(0编辑  收藏  举报