2016年亚太地区测试圆满结束

zcahfg2

我正在尝试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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章