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

第一题:字符串匹配

有相对应的匹配模式

    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 回复 分享
发布于 03-15 12:35 四川
暴力😭😭
点赞 回复 分享
发布于 03-15 12:08 湖北
第一题ac了第二题就过30%真不知道还有啥了,想看看原题
点赞 回复 分享
发布于 03-15 12:21 湖南
第一题没有特殊情况 , 我就几个ifelse,第二题是上周改编,想着做第三题,后面做了时间忘了rz只出现一次,条件没处理好只a了10% , 第三题卡半天(感觉题目的说法跟用例的计算不匹配),只有5%
点赞 回复 分享
发布于 03-15 12:40 上海
2,3过了0.1,0.25,碎了
点赞 回复 分享
发布于 03-15 12:58 上海
a了前两道,最后一个老是超时
点赞 回复 分享
发布于 03-15 16:04 江苏

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务