你有一个日志数组 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. [JZOJ2679] 跨时代

    题目 题目大意 给你一堆边,你要将它们围成面积最大的矩形. 边不一定要用完,而且围成的矩形不能凸出一块. \(n\leq 16\) \(l_i \leq 15\) 思考历程 看到这题的第一眼,就会立马 ...

  2. sql语句之分组

    对聚合函数的结果进行筛选用having,不能用where

  3. SpringMVC的孪生兄弟WebFlux

    一.入门文字介绍 官方口水话简短翻译: Spring WebFlux是一个非阻塞的Web框架,用于利用多核,短时间可一处理大量并发连接. 非阻塞式 在servlet3.1提供了非阻塞的API,WebF ...

  4. 微信公众号开发API接口大全

    在本文中,我们列出微信公众平台上可以使用的API接口以及举例如何在微信公众平台调用这些接口实现相应的功能. 接口调用说明: ① Appkey请使用的微信公众号,不要使用默认的trailuser ② 接 ...

  5. Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined)G - Bandit Blues

    题意:求满足条件的排列,1:从左往右会遇到a个比当前数大的数,(每次遇到更大的数会更换当前数)2.从右往左会遇到b个比当前数大的数. 题解:1-n的排列,n肯定是从左往右和从右往左的最后一个数. 考虑 ...

  6. (JS)应为","

    在写cshtml的时候,vs提示:(JS)应为"," 功能无法实现,一般是因为 标点切成全角了,但是我是应为把‘’打成了“” 以下错误示范: $("ol").a ...

  7. Sublime text2 + cygwin编译C++

    1.安装cygwin2.安装sublime text23.将g++和gdb加入系统环境变量(windows系统)3.安装package control4.通过package control安装subl ...

  8. Python 函数与内置函数

    1.函数的基本定义 def 函数名称(参数) 执行语句 return 返回值 def : 定义函数的关键字: 函数名称:顾名思义,就是函数的名字,可以用来调用函数,不能使用关键字来命名,做好是用这个函 ...

  9. STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据

    当出现这个问题时,往往是因为你没有在RCC寄存器中把相关的时钟使能打开. 配置寄存器之前记得调用"RCC_AxxxPeriphClockCmd"先打开需要配置的时钟源,别调用了“R ...

  10. nodejs之连接mysql数据库

    一:demo var mysql = require('mysql'); var connection = mysql.createConnection({     host    : '192.16 ...