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)); } }第二题有哪位大佬会吗?