gpt4 book ai didi

java - 计算字符串中字符出现的频率(Java、Performance)

转载 作者:行者123 更新时间:2023-12-01 13:15:48 26 4
gpt4 key购买 nike

问题

我编写了这个程序来检查每个字母出现在用户输入的字符串中的次数。它工作正常,但是有没有比为每个字符重复 26 个元素长的数组更有效或替代的解决方案来完成这项任务?

代码

import java.util.Scanner;
public class Letters {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
char[] c = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
int[] f = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
System.out.println("Enter a string.");
String k = sc.nextLine();
String s = k.toUpperCase();
s = s.trim();
int l = s.length();
System.out.println("Checking string = " + s);
char ch;
for (int i = 0; i < l; i++) {
ch = s.charAt(i);
for (int j = 0; j < c.length; j++) {
if (ch == c[j]) {
f[j]++;
}
}
}
System.out.println("Char\tFreq");
for (int i = 0; i < c.length; i++) {
if (f[i] != 0) {
System.out.println(c[i] + "\t" + f[i]);
}
}
}
}

最佳答案

您不需要显式初始化频率数组中的 26 个条目(默认值为零);您也不需要保留字符表(知道偏移量就足够了)。也就是说,你的代码可以完全消除 c 并计算每个字母;喜欢,

Scanner sc = new Scanner(System.in);
int[] f = new int[26];
System.out.println("Enter a string.");
String orig = sc.nextLine();
String k = orig.trim().toUpperCase();
System.out.println("Checking string = " + orig);
for (char ch : k.toCharArray()) {
f[ch - 'A']++;
}
System.out.println("Char\tFreq");
for (int i = 0; i < f.length; i++) {
if (f[i] != 0) {
System.out.println((char) ('A' + i) + "\t" + f[i]);
}
}

关于java - 计算字符串中字符出现的频率(Java、Performance),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55203570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com