题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
http://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
思路:
(1)找出字符串中每个字母的出现次数。aabcddd 对应的就是2211333
(2)找出次数最小的位置,location=[2 3];
(3)for(int i=0;i<strlen(str);i++) 只要 i 不等于 location中的任一元素,就输出 str[i]
程序:
#include<stdio.h>
#include<string.h>int main()
{
char str[21]={'\0'};
int num[20]={0};
while(scanf("%s",str)>0)
{
for(int i=0;i<strlen(str);i++)
{
for(int j=0;j<strlen(str);j++)
{
if(str[i]==str[j])
num[i]++;
}
//printf("%d",num[i]);
}
//找出出现次数最少的字母,并将其位置记录在location中。
int min=200;
int location[20]={-1},j;
for(int i=0;i<strlen(str);i++)
{
if(num[i]<min)
{
j=0;
min=num[i];
location[j]=i;
}
else if(num[i]==min)
{
j=j+1;
location[j]=i;
}
}
//输出剔除最少次数的字母
int allow=0;
for(int i=0;i<strlen(str);i++)
{
for(int k=0;k<=j;k++)
{
if(i!=location[k])
allow=1;
else
{
allow=0;
break;
}
}
if(allow==1)
printf("%c",str[i]);
}
}
}