#include <string> #include <vector> #include <algorithm> #include <map> #include <iostream> using namespace std; map <string, int> kind; void findAllCourse(string order, int len, string menus, int idx) { if(menus.length() == len) { kind[menus]++; return; } for(int i=idx; i<order.length(); i++) { findMenu(order, len, menus + order[i], i + 1); } } bool compare (pair<string, int> a, pair<string, int> b) { return a.second > b.second; } vector<string> solution(vector<string> orders, vector<int> course) { vector<string> answer; for(int i=0; i<course.size(); i++) { kind.clear(); for(int j=0; j<orders.size(); j++) { sort(orders[j].begin(), orders[j].end()); if (course[i] <= orders[j].length()) { findMenu(orders[j], course[i], "", 0); } } vector <pair<string, int>> list(kind.begin(), kind.end()); sort(list.begin(), list.end(), compare); if (!list.empty()) { int cnt = list[0].second; if (cnt > 1) { for (int j = 0; j < list.size(); j++) { if (list[j].second == cnt) { answer.push_back(list[j].first); } else { break; } } } } } sort(answer.begin(), answer.end()); return answer; }