题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
http://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
这回没有绑架算力
空间节省了不少
但是为什么我减少了循环重数
时间却大幅度拉长
泪目
也许是又遍历了不需要的内容
不要看开头注释
注释是暴力破解解法的思想
写的貌似是hash?看大家都说是hash,这个方法果然比n重循环简单多了。又学到了新的东西。快乐。
重点是将字符型变量与整型联系起来,可以较为方便地将记录的特征存入新的数组,便于查找。
后方直接用限制条件的标志位和字符串中每个元素的特征进行比较(新数组中内容)。
输出时输出原字符串内容。
妙啊!
#include<string.h>
//记录每个字符出现的次数
//记录最少字符出现的位置(二维vector)
//范围用次数界定
//后续字母覆盖(覆盖次数和出现次数相同)
//又是暴力解法
//寻求精妙解法
char string[20];
int i=0,j=0,k=0,flag[26]={0},len;
int min=20;
max(int a,int b)
{
return a>b?a:b;
}
int main()
{
while(scanf("%s\n",string)!=EOF)
{
len = strlen(string);
for(i=0;i<len;i++)//计算每个字母出现个数
{
flag[string[i]-'a']++;
}
for(i=0;(i<26);i++)//求最短序列
{
if((flag[i]<min)&&(flag[i]!=0))
{
min=flag[i];
}
}
for(i=0;i<len;i++)//按flag中的特征输出string的内容,最短不输出
{
if(flag[string[i]-'a']>min)
printf("%c",string[i]);
}
}
}