2021年春招笔试凉经

两个小时,就两道算法题
第一题求缘分值直接暴力装箱拆箱刚过去了,第二题要用AC自动机,没写过就放弃了
下面是我第一题的解题思路,各位大佬不喜轻喷,算法小白一个:
public class ExamXieCheng {

    public static void main(String[] args) {
//        String name1 = "Peng Xiangwen";
//        String name2 = "Pen Mengzhu";
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            String name1 = sc.nextLine();
            String name2 = sc.nextLine();
            test(name1, name2);
        }
    }

    public static void test(String name1, String name2) {
        String[] s1 = name1.split(" ");
        String[] s2 = name2.split(" ");
        for (int i = 0; i < s1.length; i++) {
//            System.out.println(s1[i]);
        }
        for (int i = 0; i < s2.length; i++) {
//            System.out.println(s2[i]);
        }
        // 比较并取出没有的字符串
        StringBuilder sub1 = new StringBuilder();
        //1、name1-姓
        String[] strings10 = s2[0].split("");
        int count1 = 0;
        for (String s : strings10) {
            if (!s1[0].contains(s)) {
                sub1.append(s + ",");
            }
        }
        String a = sub1.substring(0, sub1.length()).toString();
//        System.out.println("name1的姓中没有的字母是:" + a);
        // 计数器
        char[] charArr1 = a.toCharArray();
        for (int i = 0; i < charArr1.length; i++) {
            count1 += (int) charArr1[i];
//            System.out.println(count1);
        }
//        System.out.println("数组1的ASCII值和为:"+count1);

        //2、name2-姓
        String[] strings11 = s1[0].split("");
        int count2 = 0;
        for (String s : strings11) {
            if (!s2[0].contains(s)) {
                // 将数据添加到sub1中
                sub1.append(s);
            }
        }
        String b = sub1.substring(0, sub1.length()).toString();
//        System.out.println("name2的姓中没有的字母是:" + b);
        // 计数器
        char[] charArr2 = b.toCharArray();
        for (int i = 0; i < charArr2.length; i++) {
            count2 += (int) charArr2[i];
//            System.out.println(count2);
        }
//        System.out.println("数组2的ASCII值和为:"+count2);

        // 同样的s2也进行比较
        StringBuilder sub2 = new StringBuilder();
        // 3、name1-名
        String[] strings20 = s2[1].split("");
        int count3 = 0;
        for (String s : strings20) {
            if (!s1[1].contains(s)) {
                sub2.append(s);
            }
        }
        String c = sub2.substring(0, sub2.length()).toString();
//        System.out.println("name1的名中没有的字母是:" + c);
        // 计数器
        char[] charArr3 = c.toCharArray();
        for (int i = 0; i < charArr3.length; i++) {
            count3 += (int) charArr3[i];
        }
//        System.out.println("数组3的ASCII值和为:"+count3);

        // 4、name2-名
        String[] strings2 = s1[1].split("");
        int count4 = 0;
        for (String s : strings2) {
            if (!s2[1].contains(s)) {
                sub2.append(s);
            }
        }
        String d = sub2.substring(0, sub2.length()).toString();
//        System.out.println("name2的名中没有的字母是:" + d);
        // 计数器
        char[] charArr4 = d.toCharArray();
        for (int i = 0; i < charArr4.length; i++) {
            count4 += (int) charArr4[i];
        }
//        System.out.println("数组4的ASCII值和为:"+count4);
        System.out.println((count2 + count4));
    }
}
第二题有哪位大佬会吗?

#笔试题目#
全部评论
去leetcode学学字典树(多模式串匹配数据结构),AC自动机是在字典树上多了类似kmp的优化。 然后写2题,你就会对第二题有感觉了。我通过了83%,不知道那过的例子是不是真的要AC自动机优化还是那是个特例
1 回复 分享
发布于 2021-03-21 19:48

相关推荐

06-29 19:15
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务