華為社招題目


題目描述:

給定長度小於100的一個字符串,區分大小寫的情況下統計其中字母的個數,並按照由大到小的順序輸出.當字母個數一樣時,按照把先出現的字母放在前面.當字符串中沒有字母時,則不要輸出.

舉例:

輸入:

abbbdcdc123

輸出:

b=3

d=2

c=2

a=1

  1 #include <iostream>
  2 #include <string>
  3 #include <set>
  4 #include <vector>
  5 #include <algorithm>
  6 using namespace std;
  7 
  8 //答題思路:
  9 /*
 10 首先統計出總共有多少個不同的字母;
 11 對不同的字母,用二維vector記錄其個數(初始化為0)以及首次出現的位置(初始化為-1);
 12 遍歷整個字符串,對個數和首次位置進行更新;
 13 對vector基於個數和首次位置進行排序(冒泡法)
 14 */
 15 
 16 int main()
 17 {
 18     string str;
 19     while (cin >> str)
 20     {
 21         set<char> setInt;
 22         //這里用set來剔除重復的,還有更好的方法嗎?
 23         for (int i = 0; i < str.size(); i++)
 24         {
 25             if (str[i] >= 'A' && str[i] <= 'z')
 26             {
 27                 setInt.insert(str[i]);
 28             }
 29         }
 30 
 31         cout << endl;
 32         for (set<char>::iterator it = setInt.begin(); it != setInt.end(); it++)
 33         {
 34             cout << " " << *it;
 35         }
 36         cout << endl; 
 37 
 38         //把set轉成vector來操作,set的玩的不熟.
 39         vector<char> vec0;
 40         for (set<char>::iterator it = setInt.begin(); it != setInt.end(); it++)
 41         {
 42             vec0.push_back(*it);
 43         }
 44 
 45         vector<vector<int>> vec2;
 46         vector<int> vec1;
 47         int nOutSize = vec0.size();
 48         int nInnerSize = 3;
 49 
 50         for (int j = 0; j < nInnerSize; j++)
 51         {
 52             vec1.push_back(-1);
 53         }
 54         for (int k = 0; k < nOutSize; k++)
 55         {
 56             vec2.push_back(vec1);    
 57             vec2[k][0] = vec0[k]; //第一列存字符,第二列存個數,第三列存首次位置.
 58             vec2[k][1] = 0;
 59         }
 60 
 61         for (int k = 0; k < nOutSize; k++)
 62         {
 63             for (int j = 0; j < nInnerSize; j++)
 64             {
 65                 cout << " " << vec2[k][j];
 66             }
 67             cout << endl;
 68         }
 69         cout << endl;
 70 
 71         for (int i = 0; i < str.size(); i++)
 72         {
 73             for (int j = 0; j < vec0.size(); j++)
 74             {
 75                 if (str[i] == vec2[j][0])
 76                 {
 77                     if (vec2[j][2] == -1)
 78                     {
 79                         vec2[j][2] = i;
 80                     }
 81                     vec2[j][1]++;
 82                 }
 83             }
 84         }
 85 
 86         for (int k = 0; k < nOutSize; k++)
 87         {
 88             for (int j = 0; j < nInnerSize; j++)
 89             {
 90                 cout << " " << vec2[k][j];
 91             }
 92             cout << endl;
 93         }
 94         cout << endl;
 95 
 96         for (int i = 0; i < nOutSize-1; i++)
 97         {
 98             for (int j = i + 1; j < nOutSize; j++)
 99             {
100                 if (vec2[i][1] < vec2[j][1])
101                 {
102                     vec2[i].swap(vec2[j]); //兩個vector之間交換
103                 }
104                 else if (vec2[i][1] == vec2[j][1])
105                 {
106                     if (vec2[i][2] > vec2[j][2])
107                     {
108                         vec2[i].swap(vec2[j]);
109                     }
110                 }
111             }
112         }
113 
114         for (int k = 0; k < nOutSize; k++)
115         {
116             for (int j = 0; j < nInnerSize; j++)
117             {
118                 cout << " " << vec2[k][j];
119             }
120             cout << endl;
121         }
122         cout << endl;
123 
124         for (int k = 0; k < nOutSize; k++)
125         {
126             //轉成字符類型
127             cout << (char)vec2[k][0] << "=" << vec2[k][1] << endl;
128         }
129     }
130 }

 

輸入:

abbbdcdc123

 輸出:

a b c d

97 0 -1
98 0 -1
99 0 -1
100 0 -1

97 1 0
98 3 1
99 2 5
100 2 4

98 3 1
100 2 4
99 2 5
97 1 0

b=3
d=2
c=2
a=1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM