【问题标题】:Finding the Most Frequent Letter寻找最常见的字母
【发布时间】:2022-11-13 17:27:32
【问题描述】:

输入:一串字符。所有字母都将大写。字符串变量将在程序开始时定义。

字符串句子=“在一个直角三角形中,斜边的平方等于腿的平方和”;

输出:回答以下关于字符串的问题:

最常见的字母是什么?

它发生多少次?

如下格式化您的输出:

字符串中出现频率最高的字母是:X

(其中“X”代表出现频率最高的字母,N 代表出现的次数)

最常见的字母是 X,它在字符串中出现 N 次。

(其中 N 表示出现频率最高的字母的次数)

我并不真正关心格式,因为我想知道如何编码。我正在学习 Java 的原理,所以我处于初学者水平,因此我不能使用 char 方法,因为我还没有学习它。需要嵌套 for 循环。这是我编写的不完整代码:

类主{

公共静态无效主要(字符串[]参数){

String sentence = "IN A RIGHT TRIANGLE THE SQUARE OF THE HYPOTENUSE EQUALS THE SUM OF THE SQUARES OF THE LEGS";

// write your code here

String letter = ltr;

int count = 0;

  for (int i = 0; i < sentence.length(); i++) {

    String ltr = sentence.substring(i, i + 1);

    if (!(ltr.equals(" "))) {

      for (int j = 0; j < sentence.length(); j++) {

        String ltr2 = sentence.substring(j, j + 1);

          if (ltr.equals(ltr2)) {

            count += 1;

          }

        if (count  ) {

          

        }

      System.out.println((i) + " " + ltr + " " + (j) + " " + ltr2);

      }

    }

  }

  System.out.println(count);

}//主要结束

}//课程结束

【问题讨论】:

  • 我认为您需要记住哪个字母出现了多少次,而不是连续出现了多少次。为此使用Map&lt;Character,Integer&gt;
  • @f1sh 我在学校没有学过,所以我认为我不能使用它。我无法在变量中保存它发生的次数,而且我不知道如何将它与下一个字母进行比较

标签: java frequency letter


【解决方案1】:

我有一种与 Map 一起使用的方法。

import java.util.HashMap;
import java.util.Map;

public class MostFrequentChar {

    public static void main(String[] args) {
        String sentence = "IN A RIGHT TRIANGLE THE SQUARE OF THE HYPOTENUSE EQUALS THE SUM OF THE SQUARES OF THE LEGS";

        mostFrequentCharacter(sentence);
    }

    private static void mostFrequentCharacter(String sentence) {
        Map<Character, Integer> countMap = new HashMap<>();
        int count = Integer.MIN_VALUE;
        Character character = null;
        for (int i = 0; i < sentence.length(); i++) {
            if (!Character.isSpaceChar(sentence.charAt(i))) {
                countMap.put(sentence.charAt(i),
                        countMap.getOrDefault(sentence.charAt(i), 0) + 1);
                if (countMap.get(sentence.charAt(i)) > count) {
                    count = countMap.get(sentence.charAt(i));
                    character = sentence.charAt(i);
                }
            }
        }
        System.out.println(character + " occurs at " + count);

    }
}

在这种方法中,我保留了每个字符的计数。并检查哪一个发生最多。使用这种方法,如果需要进一步分析,我们甚至可以对字符的出现进行排序。

【讨论】:

    【解决方案2】:

    可能的解决方案:

    public static void main(String[] args) {
    
      var sentence = "IN A RIGHT TRIANGLE THE SQUARE OF THE HYPOTENUSE EQUALS THE SUM OF THE SQUARES OF THE LEGS";
      // remove blanks, split into characters (which are String by themself)
      var characters = sentence.replaceAll("\s","").split("");
      var map = new HashMap<String, Integer>();
    
      for (var c : characters) {
        if (map.containsKey(c)) {
          // increment
          map.put(c, map.get(c) + 1);
        } else {
          // initial
          map.put(c, 1);
        }
      }
    
      // get all Map entries as List
      var list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
    
      // sort by entry's value
      Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
    
        @Override
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
          return o2.getValue().compareTo(o1.getValue());
        }
    
      });
    
      // output top element
      System.out.println(list.get(0));
    }
    

    输出:E=12

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2013-03-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      相关资源
      最近更新 更多