力扣 LeetCode 937. 重新排列日志文件

在这里插入图片描述

设置两个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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值