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模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7天前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
28天前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
1月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
72 0
|
1月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
28 0
|
1月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
50 0
|
3月前
|
JSON Go API
一文搞懂 Golang 高性能日志库 - Zap
一文搞懂 Golang 高性能日志库 - Zap
194 2
|
3月前
|
存储 JSON Go
一文搞懂 Golang 高性能日志库 Zerolog
一文搞懂 Golang 高性能日志库 Zerolog
292 0
|
3月前
|
JSON 监控 应用服务中间件
[golang]使用tail追踪文件变更
[golang]使用tail追踪文件变更
|
4月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
32 0
|
4月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
31 0
下一篇
无影云桌面