牛客出bug(华为机试HJ71)

Hj71:字符串通配符

描述

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。

要求:

实现如下2个通配符:

*:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)

?:匹配1个字符

注意:匹配时不区分大小写。

输入:

通配符表达式;

一组字符串。

输出:

返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false

数据范围:字符串长度 1≤s≤100

进阶:时间复杂度:O(n2) ,空间复杂度 O(n)

输入描述:

先输入一个带有通配符的字符串,再输入一个需要匹配的字符串

输出描述:

返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false

上述为题目,都提示时间复杂度为 O(n2) 了,基本都能想到动态规划吧,废话不多说,先上代码

java 复制代码
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String match = in.nextLine();
        String target = in.nextLine();

        System.out.println(dp(match, target) ? "true" : "false");
    }

    /**
     * pass:32/34
     * eg:
     * a*?*c
     * a@c
     * 预计:false!!!!!!!!!!!!!!!todo sotmw???????
     * 实际:true
     * @param match
     * @param target
     * @return
     */
    public static boolean dp(String match, String target) {
        int m = match.length();
        int n = target.length();
        boolean[][] dp = new boolean[m][n];

        // 初始化dp
        for (int j = 0; j < n; ++j) {
            char c = match.charAt(0);
            if (c == '*') {
                dp[0][j] = true;//通配符匹配多个
                if (m > 1) {
                    dp[1][j] = match.charAt(1) == target.charAt(j);//第一位的 * 可能不匹配,多初始化一行
                }
            }
            if (j == 0 && (c == '?' || c == target.charAt(0))) {//dp[0][0] 必须初始化
                dp[0][j] = true;
            }
        }

        // 常规dp
        for (int i = 0; i < m - 1; ++i) {
            for (int j = 0; j < n - 1; ++j) {
                if (dp[i][j]) {
                    char mat = match.charAt(i + 1);
                    if (mat == '*') {
                        for (int j0 = j; j0 < n; ++j0) {
                            dp[i + 1][j0] = true;
                        }
                    } else if (mat == '?') {
                        dp[i + 1][j + 1] = true;
                    } else {
                        dp[i + 1][j + 1] = mat == target.charAt(j + 1);
                    }
                }
            }
        }
        return dp[m - 1][n - 1];
    }

这个用例用眼睛都能匹配,它告诉我说不行!!!!!!!!就问有没有被坑的感觉!!!!!?

===============================分割线===========================

后来我看到了

*:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

人为埋雷!!!!!被坑的感觉更强烈了!!!!!!!

搞些杂七杂八的消耗别人的时间精力,完全违背了练习算法的初衷,伤心了

相关推荐
m0_7496902327 分钟前
【寻迹校园 HarmonyOS NEXT 实战 38】34%/44%/22% 三栏工作台:超宽屏失物匹配的主从详情设计
华为·harmonyos·arkts·状态管理·大屏适配·主从详情
AI备忘录2 小时前
(十五)策略路由 PBR 配置命令五厂商对照:华为 华三 锐捷 迈普 思科
华为
无限码力2 小时前
华为非AI方向笔试真题 8月19号 【流量均衡控制】
华为·华为非ai方向笔试真题·华为笔试真题·笔试最新笔试真题题库·华为8月19号笔试真题·华为笔试题库
OH_TPC13 小时前
HarmonyOS APP开发---“启动秀“应用引导页App,需要用到这个库
华为·harmonyos·鸿蒙
lilian23315 小时前
Harmony os 技术实战|拼豆制图43:压缩字符矩阵上线前如何拦住错位图纸
开发语言·前端·华为·矩阵·harmonyos
2501_9197490321 小时前
华为鸿蒙免费戒咖啡APP—小羊戒咖
华为·harmonyos·鸿蒙
2501_919749031 天前
华为鸿蒙免费戒烟APP—小羊戒烟
华为·harmonyos·鸿蒙
math_hongfan1 天前
鸿蒙ArkTS手势交互:拖拽、缩放、旋转与组合手势
学习·华为·交互·harmonyos·鸿蒙
zzz海羊1 天前
2026全平台移动办公远控助手横测:从鸿蒙到工作站,ToDesk、向日葵、TeamViewer、AnyDesk谁更适配?
人工智能·华为·agent·harmonyos·teamviewer
Shadow(⊙o⊙)1 天前
Bug调试1.0
bug