You have an array of logs
. Each log is a space delimited string of words.
For each log, the first word in each log is an alphanumeric identifier. Then, either:
We will call these two varieties of logs letter-logs and digit-logs. It is guaranteed that each log has at least one word after its identifier.
Reorder the logs so that all of the letter-logs come before any digit-log. The letter-logs are ordered lexicographically ignoring identifier, with the identifier used in case of ties. The digit-logs should be put in their original order.
Return the final order of the logs.
Example 1:
Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"] Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
Constraints:
0 <= logs.length <= 100
3 <= logs[i].length <= 100
logs[i]
is guaranteed to have an identifier, and a word after the identifier.comparison function object (i.e. an object that satisfies the requirements of Compare) which returns ?true if the first argument is less than (i.e. is ordered before) the second. The signature of the comparison function should be equivalent to the following: bool cmp(const Type1 &a, const Type2 &b); |
class Solution { private: static bool cmp(string a, string b){ string afterIdA = a.substr(a.find(‘ ‘)+1); string afterIdB = b.substr(b.find(‘ ‘)+1); if (isdigit(afterIdA[0])) return false; else if (isdigit(afterIdB[0])) return true; if (afterIdA.compare(afterIdB) != 0) return afterIdA.compare(afterIdB) < 0; else return a.compare(b); } public: vector<string> reorderLogFiles(vector<string>& logs) { stable_sort(logs.begin(), logs.end(), cmp); return logs; } };
leetecode937 - Reorder Data in Log Files - easy
原文:https://www.cnblogs.com/xuningwang/p/13532945.html