这回没有绑架算力

空间节省了不少

但是为什么我减少了循环重数

时间却大幅度拉长

泪目

也许是又遍历了不需要的内容

不要看开头注释

注释是暴力破解解法的思想


写的貌似是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]);
        }
        
        
    }
    
    
    
    
    
}