0

问题如下: pangram 是一个包含字母表中每个字母的字符串。给定一个句子,确定它是否是英文字母表中的 pangram。忽略大小写。根据需要返回 pangram 或 not pangram。

我的代码适用于除“qmExzBIJmdELxyOFWv LOCmefk TwPhargKSPEqSxzveiun”之外的所有输入,即使正确答案是“pangram”,它也会返回“not pangram”。有人对为什么我的代码输出不正确的解决方案有任何想法吗?

public static String pangrams(String s) {

    Hashtable<Character, Integer> alpha = new Hashtable<Character, Integer>();
    s = s.toLowerCase();
    for (int i = 0; i < s.length()-1; i++){
        if (alpha.get(s.charAt(i)) != null){
            int value = alpha.get(s.charAt(i));
            alpha.put(s.charAt(i), value + 1);
        }
        else{
            alpha.put(s.charAt(i), 1);
        }
    }

  
    if (alpha.size() != 27){
        return "not pangram";
    }
    else{
        return "pangram";
    }
        
}
4

1 回答 1

0

根据您对 pangram 的定义,您可能需要考虑以下事项:

  1. 使用 Set 而不是 Map
  2. 据我所知,英文有26个字母
  3. 确保您没有错误地将数字或符号添加到您的集合中

鉴于上述三个陈述,我会稍微更改您的代码以反映这一点。这或多或少看起来像这样:

public static String pangrams(String s) {
    Set<Character> alpha = new HashSet<>();
    s = s.toLowerCase();
    for (int i = 0; i < s.length(); i++){
        char c = s.charAt(i);
        if (Character.isLetter(c)){
            alpha.add(c);
        }
    }
    if (alpha.size() == 26){
        return "pangram";
    }
    return "not pangram";
}
于 2021-08-12T09:06:10.057 回答