从C上的ASCII字符中检测最常见的重复符号

如何编写一个函数的实现,该函数将ASCII字符序列作为输入,并给出最常见的重复符号? 我需要在C上制作它,哪里不好?

char mostFrequentCharacter(char* str, int size); char value; int valueCount = 0; for (int i =0; i = valueCount) { valueCount = totalCount; value = oneChar; } } return value; 

要在具有双核ARM处理器和无限内存的设备上运行的优化function。

如果内存不是您所指出的问题,那么您应该创建查找表,在其中存储每个字符的出现次数。 由于输入是ASCII字符序列,结构的大小应为256.检查输入并初始化查找表后,在主for循环中,增加查找表中相应位置的出现次数,检查是否超出了出现次数当前最大计数,如果是,则更新当前最大计数和当前最常见字符。 最后,只返回最常见的角色。 该解决方案的时间复杂度是O(N)和空间复杂度O(1)。

 char mostFrequentCharacter(char* str, int size) { char mosfFrequent; int counts[256], i, maxCount = 0; // in the case of invalid input, return some invalid character if(!str || size < 1) return '\0'; for(i = 0; i < 256; i++) counts[i] = 0; for (i = 0; i < size; i++) { counts[str[i]]++; if(counts[str[i]] > maxCount) { maxCount = counts[str[i]]; mostFrequent = str[i]; } } return mostFrequent; } 

这是一个算法大纲:

  1. 声明一个256元素的整数数组(选择你的大小),将其归零。
  2. 循环遍历字符串:2a。 使用每个char作为数组和增量元素的索引。 2B。 如果增量元素是迄今为止最大的记录索引。

所有这一切都在字符串上完成。 存储256 *大小的整数字节,但你有“无限内存”,相比之下这是微不足道的;-)