算法练习 1 删除最少字符

题目

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
注意每个输入文件有多组输入,即多个字符串用回车隔开
 

输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出描述:

删除字符串中出现次数最少的字符后的字符串。

题目分析:

由题目得,我们需要先标记出每种字符出现的次数,然后找出其中出现次数最少的字符  之后将其从原字符串中剔除即可

  #include <iostream>
  #include <string>
  using namespace std;
  int main()
  {
      string s;
      while(cin>>s)
      {
          int count[26] = {0}; //26个字母对应26个位置
         int min = 9999;
         for(auto a:s)
         {
             count[a - 'a']++; //出现次数加一
         } 
         for(int i = 0;i<1000;i++) 
         {
             if(count[i] < min&&count[i])
                 min = count[i];
         }
         for(int N = 25;N>0;N--)
         {
             if(count[N] == min) 
             {
                 char c = 'a'+N;
                  for (string::iterator it = s.begin(); it < s.end(); it++)
                 {
                         if (*it == c)
                         {
                             s.erase(it);
                             it--;
                             /*
                             it--很重要,因为使用erase()删除it指向的字符后,后面的字符就移了过来,
                            it指向的位置就被后一个字符填充了,而for语句最后的it++,又使it向后移
                             了一个位置,所以就忽略掉了填充过来的这个字符。在这加上it--后就和for
                            语句的it++抵消了,使迭代器能够访问所有的字符。
                            */
                        }
                 }
             }
         }
         cout<<s<<endl;
     }
     return 0;
 }
原文地址:https://www.cnblogs.com/Wen117/p/12686344.html