1. 题目

你有一个日志数组 logs。每条日志都是以空格分隔的字串。

对于每条日志,其第一个字为字母数字标识符。然后,要么:

  • 标识符后面的每个字将仅由小写字母组成,或;
  • 标识符后面的每个字将仅由数字组成。

我们将这两种日志分别称为字母日志和数字日志。保证每个日志在其标识符后面至少有一个字。

将日志重新排序,使得所有字母日志都排在数字日志之前。字母日志按内容字母顺序排序,忽略标识符;在内容相同时,按标识符排序。数字日志应该按原来的顺序排列。

返回日志的最终顺序。

示例 :
输入:["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
输出:["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]提示:
0 <= logs.length <= 100
3 <= logs[i].length <= 100
logs[i] 保证有一个标识符,并且标识符后面有一个字。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reorder-data-in-log-files
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 自定义排序

  • 注意用稳定排序
  • 自定义函数写法
string getStr(const string &s, string &pre)
{int i = 0;while(s[i] != ' '){pre += s[i];i++;}return s.substr(i+1);
}bool cmp(string a, string b)
{string preA, preB;string sa = getStr(a,preA), sb = getStr(b,preB);if((isdigit(sa[0]) && isdigit(sb[0])))return false;else if((isdigit(sa[0]) && !isdigit(sb[0])))return false;else if((!isdigit(sa[0]) && isdigit(sb[0])))return true;else{if(sa != sb)return sa < sb;elsereturn preA < preB;}
}class Solution {public:vector<string> reorderLogFiles(vector<string>& logs) {stable_sort(logs.begin(), logs.end(), cmp);return logs;}
};

比较函数写在类内,需要加上static

class Solution {public:vector<string> reorderLogFiles(vector<string>& logs) {stable_sort(logs.begin(), logs.end(), cmp);return logs;}static string getStr(const string &s, string &pre){int i = 0;while(s[i] != ' '){pre += s[i];i++;}return s.substr(i+1);}static bool cmp(string a, string b){string preA, preB;string sa = getStr(a,preA), sb = getStr(b,preB);if((isdigit(sa[0]) && isdigit(sb[0])))return false;else if((isdigit(sa[0]) && !isdigit(sb[0])))return false;else if((!isdigit(sa[0]) && isdigit(sb[0])))return true;else{if(sa != sb)return sa < sb;elsereturn preA < preB;}
}
};


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 937. 重新排列日志文件(自定义排序)相关推荐

  1. LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组

    937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...

  2. 【Python】RotatingFileHandler:log日志文件自定义大小+滚动输出

    Python官方文档- RotatingFileHandler 代码示例1 示例:循环输出语句file test,打印到日志中. 运行后效果: 打开其中一个,内容如下: 源码 # -*- coding ...

  3. python读取文件并且排序_python 顺序读取文件夹下面的文件(自定义排序方式)...

    我们在读取文件夹下面的文件时,有时是希望能够按照相应的顺序来读取,但是 file_lists=os.listdir()返回的文件名不一定是顺序的,也就是说结果是不固定的.就比如读取下面这些文件,希望能 ...

  4. python遍历文件夹排序_python 顺序读取文件夹下面的文件(自定义排序方式)

    我们在读取文件夹下面的文件时,有时是希望能够按照相应的顺序来读取,但是 file_lists=os.listdir()返回的文件名不一定是顺序的,也就是说结果是不固定的.就比如读取下面这些文件,希望能 ...

  5. 介绍一个能够对日志文件进行自定义高亮的 VS Code 扩展

    程序员日常工作中总是需要分析不少日志文件. 日志文件可以用默认的文本编辑器打开,但是缺乏语法高亮效果,下面是一个例子: 可以尝试安装这个 Visual Studio Code 扩展:Log File ...

  6. java如何读取自定义log4j2_spring boot自定义log4j2日志文件的实例讲解

    背景:因为从 spring boot 1.4开始的版本就要用log4j2了,支持的格式有json和xml两种格式,此次实践主要使用的是xml的格式定义日志说明. spring boot 1.5.8.R ...

  7. linux 访问日志ip排序,Linux通过日志文件统计IP访问次数排序

    假设我的日志文件内容如下: 218.92.217.53 - - [22/Nov/2017:17:26:27 +0800] "GET /images/rand HTTP/1.0" 2 ...

  8. log4j输出多个自定义日志文件

    导入包 commons-logging-1.1.1.jar log4j-1.2.16.jar 如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢? 先看 ...

  9. log4j输出多个自定义日志文件、动态配置多个日志文件

    转:http://blog.sina.com.cn/s/blog_8417657f0101lskw.html log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况, ...

最新文章

  1. redhat替换yum源时redhat.repo无法删除或禁用的问题
  2. 以小见大、由浅入深-谈如何面试Javascript工程师
  3. 使用CL_GOS_DOCUMENT_SERVICE对采购申请挂附件
  4. word2vec原理浅析
  5. 【半小时大话.net依赖注入】(一)理论基础+实战控制台程序实现AutoFac注入
  6. apache-cxf 使用_使用Apache CXF进行Web服务学习
  7. android 振动传感器,Android光线传感器
  8. 数据战略规划_在战略规划期间我应该如何协作?
  9. tomcat启动报错 关键字:java.lang.NoClassDefFoundError和 java.lang.ClassNotFoundExceeption
  10. Pandas Learning
  11. c语言最新标准c22,C++20标准(c++标准手册) 官方最新版PDF
  12. html化学式编辑器,ChemDraw Pro(化学反应方程式编辑器软件)
  13. Ubuntu18.04安装英伟达显卡驱动
  14. 关于机器人方面的sci论文_近十年机器人学科中国学者SCI十大发文期刊 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
  15. 计算机网络跳槽自荐信,计算机网络应用专业求职自荐信范文
  16. 小勇个人理财 怎么用
  17. java的23种设计模式法则(权威版)
  18. 用R写一个迷宫小游戏
  19. SSL/TLS一键配置工具-IISCrypto
  20. 虾皮系统老出现服务器错误,Shopee卖家须知:虾皮系统什么状况会自动取消订单?...

热门文章

  1. 指纹图像方向图matlab,matlab指纹方向场方向图程序
  2. navicat不同数据库数据传输
  3. 十六进制转化为十进制
  4. 【opencv学习笔记八】创建TrackBar轨迹条
  5. 向银行贷款20万, 分期三年买50万的车,个人借款40万, 贷款10年买200万的房子,再贷款120万分创业...
  6. Unity 之 如何删除Unity项目里面没用的东西??
  7. Angular2升级到Angular4
  8. PythonR语言-python和r相遇
  9. 深入 JavaScript(4) - new运算符是如何工作的
  10. Linux下静态库和动态库的编译连接