你有一个日志数组 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"]

提示:

  1. 0 <= logs.length <= 100
  2. 3 <= logs[i].length <= 100
  3. logs[i] 保证有一个标识符,并且标识符后面有一个字。

错误:

 vector<string> Split(string x)
{
vector<string> strs;
string temp = "";
for (int i = 0; i < x.size(); i++)
{
if (i == x.size() - 1 && x[i] != ' ')
temp += x[i];
if (x[i] == ' ' || i == x.size() - 1)
{
if (temp == "")
continue;
strs.push_back(temp);
temp = "";
}
else
temp += x[i];
}
return strs;
} bool cmp(string x, string y)
{
int i = 0, j = 0;
int len1 = x.size();
int len2 = y.size();
for (i = 0; i < len1; i++)
{
if (x[i] == ' ')
break;
}
i++;
for (j = 0; j < len2; j++)
{
if (y[j] == ' ')
break;
}
j++;
if (x[i] >= 'a' && x[i] <= 'z' && y[j] >= '0' && y[j] <= '9')
return true;
else if (x[i] >= '0' && x[i] <= '9' && y[j] >= 'a' && y[j] <= 'z')
return false;
else if (x[i] >= 'a' && x[i] <= 'z' && y[j] >= 'a' && y[j] <= 'z')
{
vector<string> strx = Split(string(x.begin() + i, x.end()));
vector<string> stry = Split(string(y.begin() + j, y.end()));
int k = 0, l = 0;
while (k < strx.size() && l < stry.size())
{
if (strx[k] == stry[l])
{
k++;
l++;
continue;
}
else
{
return strx[k] < stry[l];
}
}
return strx.size() < stry.size();
}
else if (x[i] >= '0' && x[i] <= '9' && y[j] >= '0' && y[j] <= '9')
return false;
return false;
} class Solution {
public:
vector<string> reorderLogFiles(vector<string>& logs)
{
sort(logs.begin(), logs.end(), cmp);
return logs;
}
};

上个错误的原因是数字构成的日志文件,有的并没有按照原来的顺序排序。所以只要把字母和数字分开再排序即可。

 vector<string> Split(string x)
{
vector<string> strs;
string temp = "";
for (int i = 0; i < x.size(); i++)
{
if (i == x.size() - 1 && x[i] != ' ')
temp += x[i];
if (x[i] == ' ' || i == x.size() - 1)
{
if (temp == "")
continue;
strs.push_back(temp);
temp = "";
}
else
temp += x[i];
}
return strs;
} bool cmp(string x, string y)
{
int i = 0, j = 0;
int len1 = x.size();
int len2 = y.size();
for (i = 0; i < len1; i++)
{
if (x[i] == ' ')
break;
}
i++;
for (j = 0; j < len2; j++)
{
if (y[j] == ' ')
break;
}
j++;
vector<string> strx = Split(string(x.begin() + i, x.end()));
vector<string> stry = Split(string(y.begin() + j, y.end()));
int k = 0, l = 0;
while (k < strx.size() && l < stry.size())
{
if (strx[k] == stry[l])
{
k++;
l++;
continue;
}
else
{
return strx[k] < stry[l];
}
}
return strx.size() < stry.size();
} class Solution {
public:
vector<string> reorderLogFiles(vector<string>& logs)
{
vector<string> ans;
vector<string> strs;
vector<string> nums;
int len = logs.size();
for (int i = 0; i < len; i++)
{
int len2 = logs[i].size();
int j;
for (j = 0; j < len2; j++)
{
if (logs[i][j] == ' ')
break;
}
j++;
if (logs[i][j] >= 'a' && logs[i][j] <= 'z')
{
strs.push_back(logs[i]);
}
else
{
nums.push_back(logs[i]);
}
}
sort(strs.begin(), strs.end(), cmp);
for (int i = 0; i < strs.size(); i++)
{
ans.push_back(strs[i]);
}
for (int i = 0; i < nums.size(); i++)
{
ans.push_back(nums[i]);
}
return ans;
}
};

Leetcode937. Reorder Log Files重新排列日志文件的更多相关文章

  1. 【LeetCode】Reorder Log Files(重新排列日志文件)

    这道题是LeetCode里的第937道题. 题目描述: 你有一个日志数组 logs.每条日志都是以空格分隔的字串. 对于每条日志,其第一个字为字母数字标识符.然后,要么: 标识符后面的每个字将仅由小写 ...

  2. 【Leetcode_easy】937. Reorder Log Files

    problem 937. Reorder Log Files solution: class Solution { public: vector<string> reorderLogFil ...

  3. Linux /var/log下的各种日志文件详解

    1)/var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. 2)/var/log/wtmp:记录登录这的信息记录,被编码过,所以必须以 ...

  4. java最简单实现Log打印和生成日志文件

    导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...

  5. [Swift]LeetCode937. 重新排列日志文件 | Reorder Log Files

    You have an array of logs.  Each log is a space delimited string of words. For each log, the first w ...

  6. LeetCode.937-重新排序日志数组(Reorder Log Files)

    这是悦乐书的第358次更新,第385篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第220题(顺位题号是937).你有一系列日志.每个日志都是以空格分隔的单词串. 每个日 ...

  7. leecode 937 Reorder Log Files (模拟)

    传送门:点我 You have an array of logs.  Each log is a space delimited string of words. For each log, the ...

  8. LeetCode 937 Reorder Log Files 解题报告

    题目要求 You have an array of logs.  Each log is a space delimited string of words. For each log, the fi ...

  9. 937. Reorder Log Files

    You have an array of logs.  Each log is a space delimited string of words. For each log, the first w ...

随机推荐

  1. ransformResourcesWithMergeJavaResForDebug问题

    错误内容: Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > java.i ...

  2. Python: map和reduce

    可以先google一篇论文:MapReduce: SImplified Data Processing on Large Clusters 1. map map()函数接收2个参数:一个是函数,一个是 ...

  3. thinkphp 空控制器

    空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化. 大理石平台价格表 现在我们把前 ...

  4. git 大型灾难现场

    由于某种原因,需要重建git仓库.因此删了所有分支,重建git仓库. 删除整个过程 删除所有分支(除master外) git branch -d {branch_name}  # 删除本地分支 git ...

  5. MVC到底是设计模式还是一种框架还是一种架构? https://www.zhihu.com/question/31079945

    具体知乎讨论内容:https://www.zhihu.com/question/31079945 MVC到底是设计模式还是一种框架还是一种架构? 我认为它是3种设计模式的演变和组合:观察者模式(Obs ...

  6. python笔记四

    #!/usr/bin/env python3 from datetime import datetime, timedelta # datetime是模块,datetime模块还包含一个datetim ...

  7. 总结windows cmd 查看进程,端口,硬盘信息

    1.查看window所有进程 tasklist 2.查看windows所占用的进程号 tasklist|findstr 1916 3.杀死进程,进程pid taskkill /f /pid 10156 ...

  8. Spring 声明式事务管理(11)

    案例分析 本案例是图书管理系统精简部分,在数据库中有3张表.分别保存图书库存.图书信息和用户信息.下面是建表SQL语句 1 DROP TABLE IF EXISTS store; 2 DROP TAB ...

  9. python语句结构(range函数)

    python语句结构(range函数) range()函数 如果你需要遍历数字序列,可以使用内置range()函数,它会生成序列 也可以通过range()函数指定序列的区间 也可以使用range()函 ...

  10. java_缓冲流(字节输出流)

    缓冲流分为: 字节缓冲流:BufferedIntputSream(字节缓冲输出流),BufferdOutputStream(字节缓冲输入流) 字符缓冲流:BufferedReader(字符输入缓冲流) ...