设置两个vector chars 和nums,用来保存字母日志和数字日志。
然后使用s1保存标识符,读取标识符和空格后的第一个字符,如果是数字则存入nums中,如果是字母则把标识符放入到内容s2之后并用空格分离,形成新的字符串存入chars,这样直接对chars进行排序,内容中字母在前的s2就在前,内容相同的会比较标识符s1。
然后把chars中的新字符串重新还原成字母日志,插入到结果中,然后再把nus中的日志还原。
class Solution {
public:
vector<string> reorderLogFiles(vector<string>& logs) {
vector<string>res;//保存结果
vector<string>chars;//保存修改后的字母日志
vector<string>nums;//保存数字日志
for(int i=0;i<logs.size();i++){
int index=logs[i].find(' ');//找到标识符结束的位置
index++;
if(logs[i][index]<='9'&&logs[i][index]>='0'){//找到标识符后的第一个非空格字符,如果为数字则存入nums。
nums.push_back(logs[i]);
}
else{//如果是字母则对其进行操作,把标识符和内容换位置,中间用空格隔开,并保存到chars
string s1=logs[i].substr(0,index-1);
string s2=logs[i].substr(index);
s2+=' ';
s2+=s1;
chars.push_back(s2);
}
}
sort(chars.begin(),chars.end());//对chars排序,满足了题目中字母日志的排序要求
for(int i=0;i<chars.size();i++){//对chars中字符串重新排序,变回原来的标识符在前内容在后的样子并插入到res中
int index=chars[i].rfind(' ');
string s1=chars[i].substr(index+1);
string s2=chars[i].substr(0,index);
s1+=' ';
s1+=s2;
res.push_back(s1);
}
for(int i=0;i<nums.size();i++){//再将数字日志插入到res中
res.push_back(nums[i]);
}
return res;
}
};