2020年8月31日-58同城2021校园招聘后台开发笔试

选择题22题,一道多选题,3道把编程题,时间挺紧张的。。。

编程题1:找出共有字符串

就是给几个存放字符串的列表,找出他们的公共的字符串。也就是都出现过的,这题a了80 %

没有去重复…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package wubatongcheng;

import cn.hongliang.singleton.Father;
import com.sun.org.apache.regexp.internal.RE;

import java.util.*;

/**
* @author Hongliang Zhu
* @create 2020-08-31 20:39
*/
public class FindCommonString {

public static ArrayList<String> findCommonString (List<List<String>> values) {
// write code here
ArrayList<String> res = new ArrayList<>();



for (int j = 0; j < values.get(0).size(); j++) {
String s = values.get(0).get(j);
boolean flag = true;
for (int i = 1; i < values.size(); i++) {
flag |= values.get(i).contains(s);
}
if (flag) {
if (!res.contains(s)) { // 去重
res.add(s);
}
}
}

return res;

}

public static void main(String[] args) {

List<String> list = Arrays.asList("a", "a", "hnf", "uhg", "hnf");
List<String> list2 = Arrays.asList("a", "a", "ass", "ggg", "hnf");
List<List<String>> values = Arrays.asList(list, list2);
ArrayList<String> commonString = findCommonString(values);
System.out.println(commonString);


}

}

编程题2:500以内的整数k

一个500以内的整数k, 加上a之后变成一个完全平方数,再加上b后也变成一个完全平方数,求这个k。

暴力枚举即可,找到k+a 和 k+a+b他们是否能完全开平方。但是我只过了20% 。。。为啥

原来来理解错了题意…

应该比较 a+k 和 k+b….

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

/**
*
* @param a int整型
* @param b int整型
* @return int整型
*/
public int question (int a, int b) {
// write code here

for (int k = 0; k <= 500; k++){
// double sqrt = Math.sqrt(k + a);
// double sqrt1 = Math.sqrt(k + a + b);
boolean f = false;
for(int i = 0; i <= k+a; i++){
if(i * i == k+a){
f = true;
break;

}
}
boolean g = false;
for(int i = 0; i <= k+a+b; i++){
if(i * i == k+b){
g = true;
break;
}
}

if( f && g){
return k;
}

// int aa = (int)sqrt;
// int bb = (int)sqrt1;
// if((aa-sqrt) == 0 && (bb-sqrt1) == 0){
// return k;
// }
}

return 0;

}

编程题3: 敌军破译密码

leetcode: https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/

dp[i] 表示以字符i结尾的字符串的翻译种数。

如果第i位和第i-1位数字可以翻译,则dp[i] = dp[i-1]+dp[i-2];

否则dp[i] = dp[i-1];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public int translateNum(int num) {
String s = String.valueOf(num);
int n = s.length();
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n;i++){
if(Integer.valueOf(s.substring(i-2,i)) >= 10 && Integer.valueOf(s.substring(i-2,i)) <= 25 ){
dp[i] = dp[i-1]+ dp[i-2];
}else{
dp[i] = dp[i-1];
}
}
return dp[n];

}
}