你有一个日志数组 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. JS 实现省市联动

    使用 JavaScript 实现选择省份,后面联动改变成相应省份下的市 原理很简单: 首先创建两个select下拉框(省.市) 初始化的时候让省都显示出来,市为空  ................. ...

  2. redis和ehcache的区别,存储方式(各属于内存还是外存)

    ehcache属于内存存储,redis的缓存属于内存存储,redis的持久文件属于外存存储: redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方 ...

  3. Windows color

    设置默认的控制台前景和背景颜色. COLOR [attr] attr        指定控制台输出的颜色属性. 颜色属性由两个十六进制数字指定 -- 第一个对应于背景,第二个对应于前景.每个数字可以为 ...

  4. angular2 组件内容嵌入(ng-content)

    一.简介 内容嵌入是组件的一个高级功能特性,使用组件的内容嵌入特性能很好地扩充组件的功能,方便代码的复用. 二.用法 如上,在模版中使用了<ng-content>标签,这个标签就是用来渲染 ...

  5. CF459E Pashmak and Graph (Dag dp)

    传送门 解题思路 \(dag\)上\(dp\),首先要按照边权排序,然后图都不用建直接\(dp\)就行了.注意边权相等的要一起处理,具体来讲就是要开一个辅助数组\(g[i]\),来避免同层转移. 代码 ...

  6. 【转载】一定要会用selenium的等待,三种等待方式必会

    转载地址:http://blog.csdn.net/huilan_same/article/details/52544521,感谢博文,学习了 原文: 发现太多人不会用等待了,博主今天实在是忍不住要给 ...

  7. 第三周——重新clone项目、配置并编译

    重新clone项目的原因 因为实习尚未有公司邮箱,使用qq邮箱没有权限提交代码,因此使用晶哥的账号和gitlab, 但是git clone项目默认会关联账号(可能有某些配置项,但是找不到), idea ...

  8. sql server2014显示sa无法登录的错误

    博主用的是sql serser2014,不过这个问题的方法也适用于2012等其他版本. 当用sa登录的时候,提示如下错误: A connection was successfully establis ...

  9. DEDECMS织梦后台更新网站栏目无反应一键更新无响应的解决方法

    很多站长朋友反应,经常会遇到DEDECMS织梦后台更新网站栏目无反应和一键更新无响应的问题,这个问题的所在就是在于恢复了数据或者覆盖了织梦后台文件之后,点击一键更新完全没反应,或者生成栏目的时候其他都 ...

  10. 数组,List,Set相互转化

    1.数组转化为List: String[] strArray= new String[]{"Tom", "Bob", "Jane"}; Li ...