我们如何在字符串中存储字母的频率?

时间:2011-03-07 09:26:28

标签: algorithm

我们如何使用尽可能少的内存将字母表的频率存储在字符串中。

我认为位数组或使用位操作,这不能实现,因为我们需要存储频率,而不仅仅是字母表的出现(真或假)......

如果此问题存在任何其他数据结构,请告诉我。

另外,我们需要找到具有最大频率的字母(具有相同最大频率的aplhabets)应该打印出来。我需要一个高效的算法...

4 个答案:

答案 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)

的所有字符

所以,两者在线性时间内完成。