gpt4 book ai didi

java - 我们如何计算字符串中字符的频率

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:01 24 4
gpt4 key购买 nike

我正在研究问题的解决方案。

    static void printCharWithFreq(String str) 
{
// size of the string 'str'
int n = str.length();

// 'freq[]' implemented as hash table
int[] freq = new int[SIZE];

// accumulate freqeuncy of each character
// in 'str'
for (int i = 0; i < n; i++)
freq[str.charAt(i) - 'a']++;

// traverse 'str' from left to right
for (int i = 0; i < n; i++) {

// if frequency of character str.charAt(i)
// is not equal to 0
if (freq[str.charAt(i) - 'a'] != 0) {

// print the character along with its
// frequency
System.out.print(str.charAt(i));
System.out.print(freq[str.charAt(i) - 'a'] + " ");

// update frequency of str.charAt(i) to
// 0 so that the same character is not
// printed again
freq[str.charAt(i) - 'a'] = 0;
}
}
}

我无法理解如何

for (int i = 0; i < n; i++) 
freq[str.charAt(i) - 'a']++;

能够计算元素的频率。以及如何将其存储回该位置。

我对此感到困惑。有人可以帮我吗?

最佳答案

小写 ASCII 字母占据 ASCII table 的连续部分,从索引 97 到 122。如果您的输入由小写 ASCII 字母组成,则表达式 str.charAt(i) - 'a' 将计算为 [0, 25] 范围内的值。 a 将变为 0,b 将变为 1,c 将变为 2,依此类推。

但是,这种方法对于非小写 ASCII 字符会失败,例如大写“A”字母的值为 65,'A' - 'a' 将是 65 - 97,从而尝试访问负数组索引。

关于java - 我们如何计算字符串中字符的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54907478/

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