看见一帖子面试题,求字符串中出现次数最多的字符,并获得其第一次出现的位置,题目很简单,我用一个128的数组,记录字符出现的次数,运用位图的思想解决此问题。
代码如下:
#include <stdio.h>
#include <string.h>
#define MAX 128
int bitmap[MAX];
char find(int *x, char *str)
{
int i = 0, max = 0;
char p;
memset(bitmap, 0, sizeof(bitmap));
for (; i < strlen(str); i++)
bitmap[str[i] - '0'] += 1;
for (i = 0; i < MAX; i++)
if (bitmap[i] > max)
{
max = bitmap[i];
p = i + '0';
}
for (i = 0; i < strlen(str); i++)
if (str[i] == p)
{
*x = i;
break;
}
return p;
}
int main(void)
{
char *str = "aabbccaaBBBBcccccBbbbcccccb";
int x;
printf("%c %d", find(&x, str), x + 1);
return 0;
}