美的美少年计划25暑期实习笔试

三道水题。两个字符串处理,一个数据结构。因为报名Java后端开发比赛只能用Java写,对C++选手来说不是很适应。

  1. 题目不知如何描述,看一个样例就明白了。

Input:

-A1: v1
    B1: v2
    B2: v3
        C1: v4
-A2: v5
-A3: v6
    B3: v7
        C2: v8
#

Output:

-A1: v1
-A1-B1: v2
-A1-B2: v3
-A1-B2-C1: v4
-A2: v5
-A3: v6
-A3-B3: v7
-A3-B3-C2: v8
#

遇到#结束,总之就是字符串操作,注意缩进是4个空格而非一个制表符

Code:

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] head = new String[2333];
        while (in.hasNext()) {
            String line = in.nextLine();
            if (line.equals("#")) {
                break; 
            }
            String[] items = line.split(":");
            if (items[0].charAt(0) == '-') {
                head[0] = items[0];
                System.out.println(head[0] + ":" + items[1]);
            }
            else {
                String cuti = items[0].replaceAll(" ", "");
                int cnt = items[0].length() - cuti.length();
                head[cnt / 4] = "-" + cuti;
                for (int i = 0; i <= cnt / 4; ++i) {
                    System.out.print(head[i]);
                }
                System.out.println(":" + items[1]);
            }
        }
        System.out.println("#");
        in.close();
    }
}
  1. 给一个字符串和一个整数n,将字符串每n个字符输出一个,,最后如果不足n个则补0。此外,需要检查字符串是否只由小写字符组成,n是否大于0。如果不满足则直接输出ERROR

Input:

ccggpka 3

Output:

ccg,gpk,a00

Code:

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String s = in.next();
            int n = in.nextInt();
            boolean f = n > 0;
            for (int i = 0; i < s.length(); ++i) {
                char c = s.charAt(i);
                if (c < 'a' || c > 'z') {
                    f = false; break;
                }
            }
            if (!f) {
                System.out.println("ERROR");
                break;
            }
            for (int i = 0; i < s.length(); ++i) {
                System.out.print(s.charAt(i));
                if (i % n == n - 1 && i != s.length() - 1) System.out.print(",");
            }
            if (s.length() % n > 0) for (int i = 0; i < n - s.length() % n; ++i) System.out.print("0");
        }
        in.close();
    }
}
  1. 给一个字符串,求其不含重复字符的子串最大长度。这题我实现的复杂度是O(n),但感觉有简单写法。

Input:

abcdebfg

Output:

6

Hide:

// cdebfg

Code:

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.next();
        int[] q = new int[1123456];
        boolean[] st = new boolean[260];
        int hh = 0, tt = -1, res = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (!st[c]) {
                q[++tt] = c;
                st[c] = true;
            }
            else {
                while (hh <= tt && q[hh] != c) {
                    st[q[hh]] = false;
                    hh++;
                }
            }
            res = Math.max(res, tt - hh + 1);
        }
        System.out.println(res);
        in.close();
    }
}

以上代码均为参考代码

#技术岗笔试题求解#
全部评论
咱们都是美少年
3 回复 分享
发布于 03-16 11:34 北京
哇,看起来你遇到了一些有趣的编程题目呢!第一个题目是关于处理字符串和缩进的,第二个题目是关于字符串的分段和检查,最后一个题目是寻找最长的不重复字符子串。这些问题都需要一些细心的逻辑处理。 对于第一个问题,你的代码已经有了很好的开始,但是似乎还有一些细节需要调整。而对于第二个问题,你的代码也处理得不错,但是要注意检查输入是否符合要求哦! 至于第三个问题,寻找最长不重复字符子串确实有一个更简单的写法,叫做滑动窗口法,不过你已经实现了O(n)的复杂度,已经很棒了! 现在,我想问问,你在解决这些问题的时候有没有遇到什么困难或者特别想要讨论的地方呢?或者,如果你想要私下讨论这些题目,可以点击我的头像,给我发私信哦~(≧▽≦)
点赞 回复 分享
发布于 03-14 18:57 AI生成
Phone监控是个啥?右后45°拍屏幕嘛?求解答
点赞 回复 分享
发布于 03-14 21:07 广东
佬,报的Java后端开发,不能用cpp吗?是acm模式吗?
点赞 回复 分享
发布于 03-15 11:41 安徽
只A出来两道,不知道能不能进面试
点赞 回复 分享
发布于 03-15 19:20 陕西
美的是要线下面试吗
点赞 回复 分享
发布于 03-16 10:03 湖北
笔试是AI面试+一面再之后嘛?
点赞 回复 分享
发布于 03-20 11:13 河北

相关推荐

评论
7
36
分享

创作者周榜

更多
牛客网
牛客企业服务