LeetCode 937.Reorder Log Files 重新排列日志文件

937.重新排列日志文件

题面

你有一个日志数组 logs。每条日志都是以空格分隔的字串。
对于每条日志,其第一个字为字母数字标识符。然后,要么:
· 标识符后面的每个字将仅由小写字母组成,或;
· 标识符后面的每个字将仅由数字组成。
我们将这两种日志分别称为字母日志和数字日志。保证每个日志在其标识符后面至少有一个字。
将日志重新排序,使得所有字母日志都排在数字日志之前。字母日志按字母顺序排序,忽略标识符,标识符仅用于表示关系。数字日志应该按原来的顺序排列。
返回日志的最终顺序。

算法

算法一:

分成字母串和数字串,字母串排序,数字串接在尾部

算法二:

采用stable_sort,重载compare时:
1.当两个串均为数字串,返回false
2.一个数字串一个字母串,返回字母串较小
3.两个字母串,比较大小。

代码

算法一:

时间复杂度O(sum(length) * log(n)),额外空间复杂度O(sum(length))。
c++,8 ms

class Solution {
public:
    static bool isnum(string s){
        return (s[s.find(' ')+1]<='9'&&s[s.find(' ')+1]>='0');
    }
    static bool cmp(const string& s1,const string& s2){
        return  s1.substr(s1.find(' '))<s2.substr(s2.find(' '));
    }
    vector<string> reorderLogFiles(vector<string>& logs) {
        vector<string>vnum,vletter;
        for(auto i:logs)
            if(isnum(i))
                vnum.push_back(i);
            else
                vletter.push_back(i);
        sort(vletter.begin(),vletter.end(),cmp);
        vletter.insert(vletter.end(),vnum.begin(),vnum.end());
        return vletter;
    }
};

算法二:

时间复杂度O(sum(length) * log(n)),额外空间复杂度O(sum(length))。
c++,12 ms

class Solution {
public:
    static bool isnum(string s){
                return (s[s.find(' ')+1]<='9'&&s[s.find(' ')+1]>='0');
    }
    static bool cmp(const string& s1,const string& s2){
        if(isnum(s1)&&isnum(s2))
            return false;
        if(isnum(s2))
            return true;
        if(isnum(s1))
            return false;
        return  s1.substr(s1.find(' '))<s2.substr(s2.find(' '));

    }
    vector<string> reorderLogFiles(vector<string>& logs) {
        stable_sort(logs.begin(),logs.end(),cmp);
        return logs;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,898评论 0 9
  • 一点一丝 飘在空中 湿了空气的滋味 撒在大地 润了泥土的气息 秋天的雨 柔而软 不似夏雨潇潇 不似春雨绵绵 独独秋...
    啦啦啦啦啦3636阅读 2,187评论 0 0
  • 【阳光男孩 张文哲 6月29日 星期五 晴 坚持原创分享第241天】 一天,小猴上山采蘑菇,天快黑了,小...
    张文哲阅读 3,325评论 4 1
  • 彩云之南 我心的方向孔雀飞去 回忆悠长玉龙雪山 闪耀着银光秀色丽江 人在路上 一直梦想拥有一次说走就走的旅行,于是...
    桐花mm阅读 3,573评论 10 9
  • 姓名:许小妹 【谦虚三组日精进打卡第145天】 【知~学习】 《大学》1遍,共209遍 《六项精进》1遍,...
    陌上花7807阅读 3,244评论 0 50

友情链接更多精彩内容