华为社招题目
题目描述:
给定长度小于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
新战场:https://blog.csdn.net/Stephen___Qin