golang力扣leetcode 937.重新排列日志文件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: golang力扣leetcode 937.重新排列日志文件

937.重新排列日志文件

937.重新排列日志文件

题解

题目:简单题

1.如果字符串第二部分是数字,则排最终结果的最后
2.如果两个字符串第二部分都是数字,则保持相对稳定
3.如果字符串第二部分是字母,则字母排前面
3.如果两个字符串第二部分都是字母,则第二部分按字典序排
3.如果第二部分也相等,按第一部分字典序排

思路:内置排序写less,或者模拟。简单题没什么难度,主要是学到了新的函数

介绍:

sort.Slice()//相同元素时不保证稳定
sort.SliceStable()//相同元素时保证稳定
strings.SplitN(logs[i], " ", 2)//字符串最多被分为N份,这里是2
比如“a b c d e”------>["a","b c d e"]

代码

func reorderLogFiles(logs []string) []string {
  sort.SliceStable(logs, func(i, j int) bool {
    cnt1 := strings.SplitN(logs[i], " ", 2)
    a1, a2 := cnt1[0], cnt1[1]
    cnt2 := strings.SplitN(logs[j], " ", 2)
    b1, b2 := cnt2[0], cnt2[1]
    aIsDig, bIsDig := unicode.IsDigit(rune(a2[0])), unicode.IsDigit(rune(b2[0]))
    if aIsDig && bIsDig { //都是数字,则不交换,返回false
      return false
    }
    if !aIsDig && !bIsDig { //都是字母,按照题目要求来
      return a2 < b2 || a2 == b2 && a1 < b1
    }
    return !aIsDig //如果a是字母,则不用交换, 如果a是数字,需要交换
  })
  return logs
}
func reorderLogFiles(logs []string) []string {
  ans1 := make([]string, 0)
  ans2 := make([]string, 0)
  arr := make([]string, 0)
  mp := make(map[string][]string)
  for _, log := range logs {
    n := len(log) - 1
    if log[n] >= '0' && log[n] <= '9' {
      ans2 = append(ans2, log)
      continue
    }
    cnt := strings.SplitN(log, " ", 2)
    logFst, logSec := cnt[0], cnt[1]
    mp[logSec] = append(mp[logSec], logFst)
  }
  for k := range mp {
    arr = append(arr, k)
  }
  sort.Strings(arr)
  for _, v := range arr {
    vv := mp[v]
    sort.Strings(vv)
    for _, vvv := range vv {
      cnt := vvv + " " + v
      ans1 = append(ans1, cnt)
    }
  }
  return append(ans1, ans2...)
}
相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
目录
相关文章
|
23天前
|
机器学习/深度学习 数据可视化
【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具
【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具
|
5天前
|
存储 Linux
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
9 1
|
11天前
|
存储 关系型数据库 MySQL
|
13天前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
24 2
|
16天前
|
存储 关系型数据库 MySQL
关系型数据库mysql日志和临时文件
【6月更文挑战第15天】
32 4
|
22天前
|
SQL Oracle 关系型数据库
关系型数据库直接查看日志文件
【6月更文挑战第10天】
51 3
|
1天前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
17天前
|
监控 Go
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件
|
17天前
|
存储 监控 算法
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控
go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控
|
23天前
|
SQL 存储 关系型数据库
【MySQL技术内幕】3.2-日志文件
【MySQL技术内幕】3.2-日志文件
18 0