Keep笔试题
第一道:两个字符串中的唯一不同字符,典型的异或计算题,两个相同的值异或等于0
private static char solve(String input1, String input2){
long result = 0;
for (int i = 0; i < input1.length(); i++){
result ^= input1.charAt(i);
}
for (int i = 0; i < input2.length(); i++){
result ^= input2.charAt(i);
}
return (char) result;
} 第二道:健身房,动态规划,主要是Arrays.fill()的使用
private static int solve(int[] trainingDays, int[] costs){
int[] dp = new int[365];
int minCost = 0, lastDay = 0;
for (int trainingDay: trainingDays){
Arrays.fill(dp, lastDay, trainingDay, minCost);
lastDay = trainingDay;
minCost = getMinCost(dp, costs, trainingDay);
}
return minCost;
}
private static int getMinCost(int[] dp, int[] costs, int day){
int oneDayTicket = (day - 1 >= 0? dp[day - 1]: 0) + costs[0];
int sevenDayTicket = (day - 7 >= 0? dp[day - 7]: 0) + costs[1];
int thirtyDayTicket = (day - 30 >= 0? dp[day - 30]: 0) + costs[2];
return Math.min(oneDayTicket, Math.min(sevenDayTicket, thirtyDayTicket));
} 第三道:密码是否符合要求,很基础的字符串题,主要在于输入的部分,用nextInt()读取了用例行数之后,需要用nextLine()换到下一行,然后再进循环,否则会把第一行的行数当做第一个数据,最后一个数据也漏了。
private static boolean solve(String input) {
if (input.length() < 8 || Character.isDigit(input.charAt(0))) {
return false;
}
int[] count = new int[]{0, 0, 0};
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (!Character.isLetterOrDigit(c)){
return false;
}
if (Character.isUpperCase(c)){
count[0] = 1;
} else if (Character.isLowerCase(c)){
count[1] = 1;
} else {
count[2] = 1;
}
}
return count[0] + count[1] + count[2] > 1;
} 
腾讯云智研发成长空间 294人发布