在公交车上看一博客实现删除字符串中出现次数最少的字符,觉得里面使用数组来作为hash非常好,所以我就自己实现一遍。
要求:实现删除一个字符串中出现次数最少的字符,输出删除后的字符,要求安装原来顺序输出。如果出现次数一样,则都删除。
例如:abcabc 则全部删除,输出Null。
aabbccddd 则输出 ddd
代码:
char* DeleteLeastString(char* desStrint)
{
if (desStrint == NULL)
{
return NULL;
}
char* crtn = new char[len]; //存储输出字符,注意是new
char* ctemp = crtn;
char* ctempDes = desStrint;
int min = len //记录最少出现次数
int len = 0;
int hash[256] = {0}; //以下标为key,值为value(次数)
while(*ctempDes) //获取字符个数,并填充hash表
{
++hash[(int)*ctempDes];
ctempDes++;
len++;
}
ctempDes = desStrint;
while(*ctempDes) //找出字符出现最少次数的值
if (min > hash[(int)*ctempDes++])
min = target;
ctempDes = desStrint;
while(*ctempDes)//输出删除后的字符串
{
if (min < hash[(int)*ctempDes])
*ctemp++ = *ctempDes++;
else
ctempDes++;
}
*ctemp = '\0';
return crtn;
}