Leetcode937. Reorder Log Files重新排列日志文件
你有一个日志数组 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"]
提示:
- 0 <= logs.length <= 100
- 3 <= logs[i].length <= 100
- 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重新排列日志文件的更多相关文章
- 【LeetCode】Reorder Log Files(重新排列日志文件)
这道题是LeetCode里的第937道题. 题目描述: 你有一个日志数组 logs.每条日志都是以空格分隔的字串. 对于每条日志,其第一个字为字母数字标识符.然后,要么: 标识符后面的每个字将仅由小写 ...
- 【Leetcode_easy】937. Reorder Log Files
problem 937. Reorder Log Files solution: class Solution { public: vector<string> reorderLogFil ...
- Linux /var/log下的各种日志文件详解
1)/var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. 2)/var/log/wtmp:记录登录这的信息记录,被编码过,所以必须以 ...
- java最简单实现Log打印和生成日志文件
导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...
- [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 ...
- LeetCode.937-重新排序日志数组(Reorder Log Files)
这是悦乐书的第358次更新,第385篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第220题(顺位题号是937).你有一系列日志.每个日志都是以空格分隔的单词串. 每个日 ...
- leecode 937 Reorder Log Files (模拟)
传送门:点我 You have an array of logs. Each log is a space delimited string of words. For each log, the ...
- 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 ...
- 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 ...
随机推荐
- windows下mysql8.0.x简单安装!
1.官网下载mysql安装包并解压到自己喜欢的目录 2.在解压的目录下,添加my.ini配置文件,内容如下:[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录 下面是我 ...
- Bugs Integrated, Inc.
Bugs Integrated, Inc. 给出一个\(n\times m\)的矩形网格图,给出其中K个障碍物的位置,求其中最多能摆的\(2\times 3\)的矩形的个数,\(n\leq 150,m ...
- Apocalypse Someday
Apocalypse Someday 定义一个数是合法的,当且仅当中间出现至少一个连续的大于三个的6,求第x个合法的数,\(x\leq 50,000,000\) 解 首先,注意到求第几个,即想到试填法 ...
- 如何使用webpack 打包图片
最近在学习vue,需要用到webpack打包css,在webpack中文网https://www.webpackjs.com/里只有css的打包配置, 在编写css样式时,因为要引入 背景图片,打包时 ...
- thinkphp DEFINED标签
DEFINED标签用于判断某个常量是否有定义,用法如下: 大理石平台检验标准 <defined name="NAME"> NAME常量已经定义 </defined ...
- 单调栈——cf777E
傻逼单调栈啊我怎么想了半天dp #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef st ...
- mac系统升级导致无法在iOS设备中运行Safari Web 调试器
macOS系统升级之后,可能会导致Safari开发选项中没有iOS设备,进而无法运行Safari Web 调试器. 此问题的解决办法: 请转到设置>常规>重置>重置位置和隐私.现在, ...
- Echarts——更改仪表盘方向和颜色
做小项目需要用到仪表盘,官方给出的颜色设置如下: 而我想要如下样式的: 最后,经过一番折腾算是搞成了如下样式效果: 要达到上面效果关键在于设置Echarts的如下两处js代码: 1.大小值要颠倒,因为 ...
- login-Linux必学的60个命令
1.作用 login的作用是登录系统,它的使用权限是所有用户. 2.格式 login [name][-p ][-h 主机名称] 3.主要参数 -p:通知login保持现在的环境参数. -h:用来向远程 ...
- [转]Git 常用命令详解
史上最浅显易懂的Git教程 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ht ...