我正在尝试Google APAC问题进行练习,但提交的内容说我的解决方案不正确。
某个国家/地区的宪法规定,领导者是其名字中包含最多数量的不同字母的人。(国家/地区使用从A到Z的大写英文字母。)例如,名称GOOGLE有四个不同的字母:E,G,L和O。名称PAC CODE JAM有八个不同的字母。如果该国家仅由这2个人组成,则APAC CODE JAM将为领导者。
如果有平局,则名字按字母顺序最早出现的人是领导者。
给定该国公民的名单,您能确定谁是领导人吗?
我看不到为什么我的提交导致答案不正确。您能指出我犯错的地方吗?
对于改进我的解决方案的任何反馈,我也将不胜感激。
提前谢谢了。
import java.io.*;
import java.util.*;
public class CountryLeader {
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
int t = in.nextInt();
in.nextLine();
for (int i = 1; i <= t; ++i) {
int n = in.nextInt();
in.nextLine();
List<String> names = new ArrayList<String>();
for (int j = 0; j < n; ++j) {
names.add(in.nextLine());
}
// System.out.println(names);
System.out.println("Case #" + i + ": " + findLeader(names));
}
}
public static String findLeader(List<String> names) {
String leader = "";
int maxCount = 0;
for (String name : names) {
String current = name.replaceAll(" ","");;
char[] charArr = current.toCharArray();
int counter = 0;
Map<Character, Boolean> charMap = new HashMap<Character, Boolean>();
for (Character ch : charArr) {
if (charMap.containsKey(ch)) {
continue;
} else {
charMap.put(ch, true);
counter++;
}
}
if (maxCount < counter) {
leader = name;
maxCount = counter;
}
}
return leader;
}
}
这些是我尝试过的测试,看起来工作正常:
3
3
ADAM
BOB
JOHNSON
2
A AB C
DEF
8
ABC DE
A B C D E F G
AB
A
BBBBBBBBBBBBBBBBBBBBBBBBB
AAAAAAAAAAAAKKKKKKKKKKKKKKKCCCCCCCCc
ABCDEFGHIJKLM
CDEFGHIJKLMNO
输出:
Case #1: JOHNSON
Case #2: A AB C
Case #3: ABCDEFGHIJKLM
如果两个字符串包含相同数量的不同字符,则您忘记检查字母顺序。这可以很容易纠正,通过增加一个额外if
的-clause findLeader
:
if (maxCount < counter) {
leader = name;
maxCount = counter;
} else if(maxCount == counter && name.compareTo(leader) < 0) {
// same number of distinct character => lexicographical ordering
leader = name;
maxCount = counter;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句