Skip to content

Latest commit

 

History

History
37 lines (31 loc) · 1.51 KB

937. 重新排列日志文件.md

File metadata and controls

37 lines (31 loc) · 1.51 KB

937. 重新排列日志文件

题目传送门

点击这里

解题思路

这道题使用的是自定义排序的方法,主要是对字符串进行处理,首先第一个标识符是字母和数字的混合,只有在排序过程中,两个均为字母日志时,且在内容相同时,看标识符的比较,否则比较第二个字符串的字典序,如果都为数字,则保持顺序,如果第一个是字母的,第二个是数字的话,保持顺序,保证字母日志在数字日志之前。

代码

func reorderLogFiles(logs []string) []string {
    // 自定义排序
    sort.SliceStable(logs, func(i, j int) bool {
        s, t := logs[i], logs[j]
        // 取出来字符串并且切割,将标识符切掉,
        s1 := strings.SplitN(s, " ", 2)[1]
        s2 := strings.SplitN(t, " ", 2)[1]
        // 然后判断第二个字符串
        isDigit1 := unicode.IsDigit(rune(s1[0]))
        isDigit2 := unicode.IsDigit(rune(s2[0]))
        // 如果二者都为数字,保持原来的顺序
        if isDigit1 && isDigit2 {
            return false
        }
        // 如果二者都为字母,则判断字典序,或者在第二个字母相同的情况下,按照正常的标识符排序
        if !isDigit1 && !isDigit2 {
            return s1 < s2 || s1 == s2 && s < t
        }
        // 如果第一个是字母的话,返回true,字母排在数字的前面
        return !isDigit1
    })
    return logs
}