3

我需要完成一个程序,该程序将采用一个字符串,例如:“Mass”,并返回类似于这样的输出:

M's: 1 A's: 1 S's: 2

我需要创建一个方法,它只接受一个字符串参数并返回一个名为 Pair 的对象数组。pair 对象就是我上面的输出。Pair 中的每个元素都包含一个字符和该字符的出现次数。这是对类:

public static class Pair
    {
        public char _char;
        public int _occurances;

        public Pair(char c)
        {
            _char = c;
            _occurances = 0;
        }

    }

这是我正在研究的方法:

public Pair[] auditString(String input) {


    return Pairs;

}

如果我要输入“Mass”并且我的方法返回一个包含此数据的对数组,如何使该方法 auditString 工作:

对数组将生成 3 个内存位置

元素 0 处的对具有字符 m 出现 1 次,元素 1 处的对具有字符 a 出现 1 次,元素 2 处的对具有字符 s 出现 2 次

4

3 回答 3

1

由于这是一个家庭作业问题,请考虑以下问题:

  • 您将如何分析给定的输入字符串?显然,您必须查看每个字符来计算所需的结果。
  • 您将如何跟踪分数?你可以在遇到角色的时候创建一个 Pair 对象,但是当你第二次遇到一个角色时你需要做什么呢?你如何为同一个角色再次获得 Pair 对象?或者,您也可以为每个字符创建 Pair 对象,然后找到一种方法来计算实际答案,方法是使用多次出现的 Pair 对象(即,对于同一个字符)。
于 2012-07-05T21:55:57.123 回答
1

我假设这是家庭作业,所以我会尽量避免一个过于直接的答案。

我建议考虑这个问题的方法:

  • 什么是字符串?即字符串是由什么组成的?字符串本质上是数组,那么如果他们要求您记录 s 数组中数字的频率,您将如何解决这个问题int?这个问题的解决方案在逻辑上是相同的。

  • 考虑一个接一个地遍历字符串的每个“片段”。您如何利用“Pair”类,以便始终以这种方式跟踪字母频率?

  • 想象一下,在您访问的每个字母中,您完全没有注意到字符串的其余部分。Pair 类(不太具体,一般来说是 Objects)的哪些特性可以让你用这么少的“知识”解决问题?

  • 如果它让您感到困惑,请首先忽略“配对”对象。试着先把逻辑弄清楚。如果您能在头脑中或纸上逻辑地想出解决方案,那么 Pair 对象的使用应该会变得非常清晰。

希望能有所帮助!

于 2012-07-05T21:59:28.383 回答
0
public Pair[] GetLetterPairs(String str)
{
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();

    str = str.toLowerCase();

    for(char c : str.toCharArray())
    {
        if(!map.containsKey(c))
            map.put(c, 1);
        else
        {
            int value = map.get(c);
            map.put(c, ++value);
        }
    }

    Pair[] pairs = new Pair[map.size()];
    int i = 0;
    for(Entry<Character, Integer> entry : map.entrySet())
    {
        pairs[i] = new Pair(entry.getKey(), entry.getValue());
        i++;
    }

    return pairs;
}
于 2012-07-05T22:16:47.293 回答