我们如何使用尽可能少的内存将字母表的频率存储在字符串中。
我认为位数组或使用位操作,这不能实现,因为我们需要存储频率,而不仅仅是字母表的出现(真或假)......
如果此问题存在任何其他数据结构,请告诉我。
另外,我们需要找到具有最大频率的字母(具有相同最大频率的aplhabets)应该打印出来。我需要一个高效的算法...
答案 0 :(得分:3)
我认为Huffman coding是你想要的,但是更好地解释你的问题以更好地理解它,还有其他一些方法,但你应该解释你的问题(至少我是一个人需要更多的解释)。
答案 1 :(得分:1)
/ *对于短字符串,如“abaz”,像(a:2,b:1,z:1)这样的Hashmap会比整个字母更短* /
main()
{
int count,i,j;
char str[50];
printf("Enter string : ");
gets(str);
for(i=0;i<=strlen(str)-1;i++)
{
count=1;
if(str[i]==' ')
continue;
for(j=i+1;j<=strlen(str)-1;j++)
{
if(str[i]==str[j])
{
str[j]=' ';
count++;
}
}
printf("%c : %d \n",str[i],count);
}
getch();
}
答案 2 :(得分:0)
对于短字符串,例如“abaz”,像(a:2,b:1,z:1)这样的Hashmap将比整个字母更短。
是仅仅针对ascii a-z,还是考虑了UTF-8字符?
答案 3 :(得分:0)
创建一个HashMap,其字符映射到频率。同时保持最大计数并在需要时增加它。最后,您可以存储所有频率和最大计数。现在迭代hashmap并选择映射到等于最大计数值的字符键。
存储= O(n) 检索最大频率= O(n)
的所有字符所以,两者在线性时间内完成。