美团2024年秋招第一场笔试【技术】
- 小美的密码
小美准备登录美团,需要输入密码,小美忘记了密码,只记得密码可能是 nn 个字符串中的一个。小美会按照密码的长度从小到大依次尝试每个字符串,对于相同长度的字符串,小美随机尝试,并且相同的密码只会尝试一次。小美想知道,她最少需要尝试多少次才能登录成功,最多需要尝试多少次才能登录成功。
小美不会重新尝试已经尝试过的字符串。成功登录后会立即停止尝试。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
第一行输入一个整数 代表密码字符串的个数。
第二行输入一个只由小写字母组成的字符串 代表正确的密码。
接下来n行,每行输入一个长度不超过1000的字符串,代表小美记得的密码。
输出描述:
在一行上输出两个整数,表示最少和最多尝试次数。
示例1
输入例子:
4
ab
abc
ab
ac
ac
输出例子:
1 2
例子说明:
小美可能按照 ["ab", "ac", "abc"] 的顺序尝试,第一次尝试成功,也可能按照 ["ac", "ab", "abc"] 的顺序尝试,第二次尝试成功。
小美在尝试 "ac" 发现不正确后不会继续尝试 "ac"。
import java.util.Comparator;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.nextLine();
String correct = in.nextLine();
Set<String> set = new HashSet<>();
for (int i = 0; i < n; i++) {
set.add(in.nextLine());
}
String[] possible = set.stream().sorted(Comparator.comparingInt(String::length)).toArray(String[]::new);
int small = 0, same = 0;
for (String s : possible) {
if (s.length() < correct.length()) {
small++;
} else if (s.length() == correct.length()) {
same++;
}
}
System.out.println((small + 1) + " " + (small + same));
in.close();
}
}