今天做一个简单的算法题,居然用了1个小时,STL unordered_map用多了,没想到map这次派上了用场,这里记录一下:
算法题为 给一个字符串例如 abaaba,每连续两个字符组成一个子串 ab, ba, aa,ab,ba,统计出现的个数,按照个数大小排序打印,这里 ab 2次,ba两次,aa 1次,如果都是一样的次数,按照字典顺序打印,例如这里ab 和ba都是2次,那么先打印ab 然后是ba 最后 是aa;
算法:找出字串,然后用map记录这个string和它出现的个数,注意要用map不能用unordered_map,这样能保证是按照字典排序,然后再用一个稳定排序按照这个Map的key排序即可。
#include <iostream> #include <string> #include <algorithm> #include <cstring> #include <vector> #include <unordered_map> #include <map> using namespace std; typedef pair<string, int> PAIR; int cmp(const PAIR &x, const PAIR &y) { return x.second > y.second; } void p (string& s) { vector<string> vec; ; ; i < num; i++) { ); vec.push_back(tmp); } sort (vec.begin(), vec.end()); map <string, int> tmp; ]= {}; ] = {}; for (auto itr = vec.begin(); itr != vec.end(); itr ++) { string val = *itr; //cout << val << endl; ] - ] - 'a'] == true) { tmp[val] = tmp[val] + ; } else { tmp[val] = ; } first[val[] - 'a'] = true; sec[val[] - 'a'] = true; } vector <PAIR> pair_vec; //用pair来实现按照pair的第二个元素大小也就是value排序 for (auto it = tmp.begin(); it != tmp.end(); it++) { pair_vec.push_back(make_pair(it->first, it->second)); } stable_sort(pair_vec.begin(), pair_vec.end(), cmp); for (auto curr = pair_vec.begin(); curr != pair_vec.end(); ++curr) { cout << curr->first << endl; } } int main() { string s; cin >> s; p(s); ; };
测试代码
mississippitennessee
输出:
ss
is
si
ee
en
es
ip
it
mi
ne
nn
pi
pp
se
te