题目描述:
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:
- Each word after the identifier will consist only of lowercase letters, or;
- Each word after the identifier will consist only of digits.
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.
class Solution {
public:
static bool comp(string s1, string s2)
{
string iden1, let1, iden2, let2;
istringstream iss1(s1), iss2(s2);
getline(iss1,iden1,' ');
getline(iss1,let1);
getline(iss2,iden2, ' ');
getline(iss2,let2);
if(let1==let2) return iden1<iden2;
else return let1<let2;
}
vector<string> reorderLogFiles(vector<string>& logs) {
vector<string> result;
for(auto log:logs) if(is_letter_log(log)) result.push_back(log);
sort(result.begin(), result.end(), comp);
for(auto log:logs) if(!is_letter_log(log)) result.push_back(log);
return result;
}
bool is_letter_log(string s)
{
return s.back()>='a'&&s.back()<='z';
}
};