我正在嘗試使用 Google APAC Question進行練習,但提交的內容說我的解決方案不正確。某個國家的憲法規定,領導人是姓名中包含最多不同字母的人。(該國家/地區使用從 A 到 Z 的大寫英文字母。)例如,名稱 GOOGLE 有四個不同的字母:E、G、L 和 O。名稱 APAC CODE JAM 有八個不同的字母。如果這個國家只有這兩個人,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; }}
1 回答

至尊寶的傳說
TA貢獻1789條經驗 獲得超10個贊
如果兩個字符串包含相同數量的不同字符,您忘記檢查字母順序。這可以通過在 中添加額外的 - 子句來相當容易地if糾正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;
}
添加回答
舉報
0/150
提交
取消