美团笔试测试方向第二场算法题

第一题:字符串匹配

有相对应的匹配模式

    public static void main(String[] args) {
        int m ;
        Scanner in = new Scanner(System.in);
        m = in.nextInt();
        in.nextLine();
        for(int i = 0; i < m ;i++){
            System.out.println(check(in.nextLine()));
        }
    }

    public static String check(String transportId){
        if(transportId.length() < 2) return "Invalid";
        String str = transportId.substring(0,2);
        String context = transportId.substring(2);

        switch (str){
            case "SF" :
                if(context.length() != 10) return "Invalid";
                for(char c : context.toCharArray()){
                    if (c < '0' || c > '9'){
                        return "Invalid";
                    }
                }
                return "Normal";
            case "EX" :
                if(context.length() != 10) return  "Invalid";
                for(int i = 0; i< context.length(); i++){
                    if(i < 2){
                        if(context.charAt(i) < 'A' || context.charAt(i) > 'Z'){
                            return "Invalid";
                        }
                    }
                    if(context.charAt(i) < '0' || context.charAt(i) > '9'){
                        return "Invalid";
                    }
                }
                return "Express";
            case "IN":
                if(context.length() != 9) return "Invalid";
                int sum = 0;
                for(int i = 0; i< context.length(); i++){
                    if(i < 3){
                        if(context.charAt(i) < 'A' || context.charAt(i) > 'Z'){
                            return "Invalid";
                        }
                    }
                    if(context.charAt(i) < '0' || context.charAt(i) > '9'){
                        return "Invalid";
                    }
                    if(i >= context.length()-3){
                        sum += context.charAt(i) - '0';
                    }
                }
                if(sum % 2 == 0) return "InterNational";
                else return "Invalid";
            default:
                if(transportId.length() != 12) return "Invalid";
                if(transportId.charAt(0) == '0') return "Invalid";
                for(char c : transportId.toCharArray()){
                    if(c > '9' || c < '0') return "Invalid";
                }
                return "E-commerce";
        }
    }

通过62.5% 后面的特殊情形想不到了

第二题

字符匹配

遇到R反转 遇到Z回退操作(如果是R就反转回来,如果是添加操作就删除)

   static StringBuilder res;
   static String target;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine();
        for (int i = 0;i < n;i++){
            target = in.nextLine();
            res = new StringBuilder();
            dfs(0,false,0);
            System.out.println(res.toString());
        }
    }

    public static void dfs(int i,boolean isRev, int addWhat){
            if(i >= target.length()) return;

        //尝试回溯
        if(target.charAt(i) == 'Z'){
            if(isRev){
                res.reverse();
                isRev = false;
            }
            if(addWhat != 0){
                res.deleteCharAt(addWhat);
                addWhat = 0;
            }
        }

            if(target.charAt(i) == 'R') {
                res.reverse();
                isRev = true;
            }else{
                isRev = false;
            }
            //添加参数
        addWhat = 0;
        if(target.charAt(i) != 'R' && target.charAt(i) != 'Z') {
            res.append(target.charAt(i));
            addWhat = res.length() - 1;
        }

        //传递的参数为i+1 这一步的操作
        dfs(i+1,isRev,addWhat);



    }

通过50%,应该还需要回溯,想不到了

第三题

求和 给定l1 r1 l2 r2

存在以下关系 f(a,b) 当a是b的倍数时 f(a,b) = 1反之为0

现在要求和

贴一段暴力代码

        for(int j = l2 ;j<=r2;j++){
            for(int i = l1;i<=r1;i++){
                sum+= f(i,j);
            }
        }

麻了

全部评论
第二题那个r和z只能是大写才触发操作,而且题目说了只会出现一次,所以判断过一次后后面都是普通操作了
3 回复 分享
发布于 2025-03-15 12:35 四川
a了前两道,最后一个老是超时
点赞 回复 分享
发布于 2025-03-15 16:04 江苏
2,3过了0.1,0.25,碎了
点赞 回复 分享
发布于 2025-03-15 12:58 上海
第一题没有特殊情况 , 我就几个ifelse,第二题是上周改编,想着做第三题,后面做了时间忘了rz只出现一次,条件没处理好只a了10% , 第三题卡半天(感觉题目的说法跟用例的计算不匹配),只有5%
点赞 回复 分享
发布于 2025-03-15 12:40 上海
第一题ac了第二题就过30%真不知道还有啥了,想看看原题
点赞 回复 分享
发布于 2025-03-15 12:21 湖南
暴力😭😭
点赞 回复 分享
发布于 2025-03-15 12:08 湖北

相关推荐

xdm&nbsp;早上喝奶茶差点喷出来。事情是这样的,我们班有个哥们儿,简称&nbsp;L,去年秋招拿了字节sp,专业方向是后端。我们当时都震惊:这哥们儿平时课上从来不发言,期末小组作业基本是划水的那种,刷题平台&nbsp;commit记录我点进去看过,绿格子稀稀拉拉。但他面试一路绿灯。一面二面三面&nbsp;hr&nbsp;面,全过,给的还是sp。当时班级群里恭喜他的、问他经验的、约饭的,热闹了一周。他说自己"运气好,准备充分"。我们都信了,直到三月初他入职。入职第二周开始,班里另一个进字节的同学W(在隔壁组的)开始跟我他的不对劲。一开始是写代码慢,后来写不出来,再后来是组里&nbsp;mentor&nbsp;让他fix&nbsp;一个简单&nbsp;bug&nbsp;都搞了一下午没动静。最离谱的是上周。W&nbsp;说他们大部门搞了个新人分享会,让新人讲一下自己负责模块的设计思路。L&nbsp;上去讲了&nbsp;20分钟,全程念稿子,问答环节别人随便问一个"那你这里为什么用&nbsp;Redis&nbsp;不用&nbsp;Memcached",他直接卡&nbsp;30秒说"这个我回去再确认一下"。会后他&nbsp;mentor&nbsp;直接找&nbsp;leader&nbsp;谈,leader&nbsp;找&nbsp;hr&nbsp;谈,hr调出了他面试录像,全程对比口型和回答节奏,发现他二三面有大量时长在偷偷看屏幕外(推测开了双机位&nbsp;AI&nbsp;答题)。(这段是&nbsp;W后来转述给我的,他自己也是听他组里同事八卦来的)昨天下班前,W&nbsp;告诉我L&nbsp;被辞退了,让他自己走,不走就走仲裁但会发函到学校。L&nbsp;现在已经回学校了,朋友圈仅三天可见。我说真的,我不是个心眼小的人,但是我看到这个消息的时候真的有种"嗯,挺好"的感觉。去年秋招我投字节后端,简历挂。我准备了八个月,背&nbsp;八股&nbsp;+&nbsp;刷&nbsp;500&nbsp;题&nbsp;+项目改了三版,连面试机会都没拿到。班里这哥们儿凭着一个外挂上岸,最后还是被甩出来了。不是说作弊就一定会被发现,但是当面试拿到的&nbsp;offer远远超出真实能力的时候,迟早会有这一天。试用期三个月不是给你过家家的,是真的要写代码、要在会议上回答问题、要扛需求的。我现在反而有点同情他。同情他相信"上岸就是终点"。发出来不是为了嘲笑谁,就是想说给那些正在被身边作弊上岸的同学搞得很&nbsp;emo&nbsp;的&nbsp;uu&nbsp;们听——别急,回旋镖很长,但它一定会回来。你继续刷你的题,写你的项目,背你的八股。该是你的迟早是你的,不是你的早晚还得还回去。xdm&nbsp;共勉。
牛客12588360...:我不想评论面试方式,作弊是绝对不对的,但是你八股加刷题也不过是个做题小子,他穿帮纯粹是他菜,你也没有高明到哪里去
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务