[Swift Weekly Contest 110]LeetCode937. 重新排列日志文件 | Re
You have an array of? For each log,the first word in each log is an alphanumeric?identifier.? Then,either:
We will call these two varieties of logs?letter-logs?and?digit-logs.? It is guaranteed that each log has at least one word after its identifier. Reorder the logs so that all of the letter-logs come before any digit-log.? The letter-logs are ordered lexicographically ignoring identifier,with the identifier used in case of ties.? The digit-logs should be put in their original order. Return the final order of the logs. Example 1: Input: ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
Output: ["g1 act car","a8 act zoo","a1 9 2 3 1","zo4 4 7"]
Note:
你有一个日志数组? 对于每条日志,其第一个字为字母数字标识符。然后,要么:
我们将这两种日志分别称为字母日志和数字日志。保证每个日志在其标识符后面至少有一个字。 将日志重新排序,使得所有字母日志都排在数字日志之前。字母日志按字母顺序排序,忽略标识符,标识符仅用于表示关系。数字日志应该按原来的顺序排列。 返回日志的最终顺序。 示例 : 输入:["a1 9 2 3 1","a8 act zoo"] 输出:["g1 act car","zo4 4 7"] 提示:
120ms 1 class Solution { 2 func reorderLogFiles(_ logs: [String]) -> [String] { 3 var n:Int = logs.count 4 var ss:[[String]] = [[String]](repeating: [String](),count: n) 5 for i in 0..<n 6 { 7 let str:String = logs[i] 8 var end = str.firstIndex(of: " ") ?? str.endIndex 9 //不包括结束索引 10 var id:String = String(str[str.startIndex..<end]) 11 let start = end == str.endIndex ? str.endIndex : str.index(end,offsetBy: 1) 12 var rem:String = String(str[start..<str.endIndex]) 13 ss[i] = [rem,id,str,String(format: "%05d",i)] 14 } 15 ss.sort(by: compare) 16 var ret:[String] = [String] (repeating:String(),count: n) 17 for i in 0..<n 18 { 19 ret[i] = ss[i][2] 20 } 21 return ret 22 } 23 24 func compare(_ a:[String],_ b:[String]) -> Bool 25 { 26 //‘0‘:ASCII码值 48; ‘9‘ASCII码值 57 27 var num1:Int = a[0].toInt(0) 28 var ad:Bool = num1 >= 48 && num1 <= 57 29 30 var num2:Int = b[0].toInt(0) 31 var bd:Bool = num2 >= 48 && num2 <= 57 32 33 if !ad && bd{return true} 34 if ad && !bd{return false} 35 var str1:String 36 var str2:String 37 if !ad && !bd 38 { 39 if a[0] != b[0] 40 { 41 str1 = a[0] 42 str2 = b[0] 43 } 44 else 45 { 46 str1 = a[1] 47 str2 = b[1] 48 } 49 } 50 else 51 { 52 str1 = a[3] 53 str2 = b[3] 54 } 55 let num = str1.caseInsensitiveCompare(str2).rawValue 56 if num == -1 57 { 58 return true 59 } 60 return false 61 } 62 } 63 64 extension String { 65 //获取指定索引位置的字符,返回为字符串形式 66 func charAt(_ num:Int) -> String 67 { 68 return String(self[index(self.startIndex,offsetBy: num)]) 69 } 70 71 //获取指定索引位置字符的ASCII整数值 72 func toInt(_ num:Int) -> Int 73 { 74 let s = charAt(num).unicodeScalars 75 return Int(s[s.startIndex].value) 76 } 77 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |