zoukankan      html  css  js  c++  java
  • 算法练习 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;
     }
  • 相关阅读:
    C# 委托应用总结
    C语言指针总结
    SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
    C#接口
    C# Linq
    C#反射
    重写与重载
    mysql01
    ajax
    bootstrap02导航菜单
  • 原文地址:https://www.cnblogs.com/Wen117/p/12686344.html
Copyright © 2011-2022 走看看