在公交车上看一博客实现删除字符串中出现次数最少的字符,觉得里面使用数组来作为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; }
我相信,肯定有比我更好的实现方法,知道的告知一声,谢谢。