你有一个日志数组 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. 关于jquery.validate.js的用法

    // 手机号码验证 jQuery.validator.addMethod("isMobile", function(value, element) {   var length = ...

  2. [JZOJ3400] 【GDOI2014模拟】旅行

    题目 题目大意 给你一个图,让你选择权值和最小的边,使得\(1\)和\(n\),\(2\)和\(n-1\),--,\(K\)和\(n-K+1\)联通. \(K\leq 4\) 思考历程 一看到这题就觉 ...

  3. thinkphp ASSIGN标签

    ASSIGN标签用于在模板文件中赋值变量,用法如下: 直线电机厂家 <assign name="var" value="123" /> 在运行模板的 ...

  4. 剑指Offer-13:调整数组位置使奇数位于偶数前面

    题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.例如给定一个数组 ...

  5. 线段树离散化+区间更新——cf1179C好题

    绝对是很好的题 把问题转化成当第i个询问的答案是数值x时是否可行 要判断值x是否可行,只要再将问题转化成a数组里>=x的值数量是否严格大于b数组里的>=x的值 那么线段树叶子结点维护对于值 ...

  6. IDEA引入jar但无法导入class

    如图,jar已经导入,但是无法import class 选择setting->maven->Ignored Files,将被忽略的model取消选中就可以解决了

  7. 14. TIM of STM32F103ZE

    block diagram 14.3.1 Time-base unit 有三个基础的寄存器: 计数寄存器(TIMx_CNT) 预分配寄存器(TIMx_PSC), 自动重载寄存器(TIMx_ARR) 重 ...

  8. HDU-1492-The number of divisors(约数) about Humble Numbers -求因子总数+唯一分解定理的变形

    A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, ...

  9. Spring Boot 发布 jar 包转为 war 包秘籍。

    Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布.使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题.所以,jar包不一定 ...

  10. Win10命令提示符git log中文乱码的解决方案

    在系统环境变量中新建一个名为LESSCHARSET的变量 其值为utf-8 新建完毕后应用,git log就不会出现乱码的问题了^_^ 参考博文:git- win10 cmd git log 中文乱码 ...