这道题的解法写的不是很好,比较混乱,建议看看别人的,
class Solution {
public:
bool isdigitlog(string s){
// find first space
int i=0;
for (i=0;i<s.size();i++){
if (s[i]==' '){break;}
}
// judge
if (s[i+1]>='0' && s[i+1]<='9'){
return true;
}
else{
return false;
}
}
vector<string> sortletters(vector<string>& letters){
map<string, vector<string>> result;
for (int i=0;i<letters.size();i++){
int flag = 0;
string left = "";
string right = "";
string letter = letters[i];
for (int j=0;j<letter.size();j++){
if (flag==0 && letter[j]==' '){
flag = 1;
continue;
}
if (flag == 0){
left += letter[j];
}
else{
right += letter[j];
}
}
cout<<left<<endl;
cout<<right<<endl;
cout<<letter<<endl;
if (result.find(right)!=result.end()){
result[right].push_back(letter);
}
else{
vector<string> temp;
temp.push_back(letter);
result[right]=temp;
}
}
vector<string> final_res;
for (map <string,vector<string>>::iterator it = result.begin( );it != result.end( ); it++ ){
vector<string> temp = it->second;
sort(temp.begin(),temp.end());
for(int kk=0;kk<temp.size();kk++){
final_res.push_back(temp[kk]);
}
}
return final_res;
}
vector<string> reorderLogFiles(vector<string>& logs) {
vector<string> letters;
vector<string> digits;
for (int i=0;i<logs.size();i++){
if (isdigitlog(logs[i])){
digits.push_back(logs[i]);
}
else{
letters.push_back(logs[i]);
}
}
// sort letters
vector<string> letters_sort = sortletters(letters);
// gain result
vector<string> res;
for(int i=0;i<letters_sort.size();i++){
res.push_back(letters_sort[i]);
}
for(int i=0;i<digits.size();i++){
res.push_back(digits[i]);
}
return res;
}
};