zoukankan      html  css  js  c++  java
  • LeetCode 937. Reorder Data in Log Files

    原题链接在这里:https://leetcode.com/problems/reorder-data-in-log-files/

    题目:

    You have an array of logs.  Each log is a space delimited string of words.

    For each log, the first word in each log is an alphanumeric identifier.  Then, either:

    • Each word after the identifier will consist only of lowercase letters, or;
    • Each word after the identifier will consist only of digits.

    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: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
    Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]

    Constraints:

    1. 0 <= logs.length <= 100
    2. 3 <= logs[i].length <= 100
    3. logs[i] is guaranteed to have an identifier, and a word after the identifier.

    题解:

    Sort the logs.

    When both are letters, sort based on the second part.

    If need to flip, lamda return 1.

    Note: split("\s+", 2), 2 could specify only split into 2 parts. If there are multiple "\s+", only split on the first one.

    Time Complexity: O(nlogn*m). n = logs.length. m = average length.

    Space: O(1).

    AC Java:

     1 class Solution {
     2     public String[] reorderLogFiles(String[] logs) {
     3         if(logs == null || logs.length == 0){
     4             return logs;
     5         }
     6         
     7         Arrays.sort(logs, (a, b) -> {
     8             String [] sa = a.split("\s+", 2);
     9             String [] sb = b.split("\s+", 2);
    10             
    11             boolean isDigita = Character.isDigit(sa[1].charAt(0));
    12             boolean isDigitb = Character.isDigit(sb[1].charAt(0));
    13             
    14             if(!isDigita && !isDigitb){
    15                 int com = sa[1].compareTo(sb[1]);
    16                 if(com == 0){
    17                     return sa[0].compareTo(sb[0]);
    18                 }
    19                 
    20                 return com;
    21             }else if(isDigita && isDigitb){
    22                 return 0;
    23             }else if(isDigita && !isDigitb){
    24                 // flip when a is digit and b is letter
    25                 return 1;
    26             }else{
    27                 return -1;
    28             }
    29         });
    30         
    31         return logs;
    32     }
    33 }
  • 相关阅读:
    00072_System类
    eWebEditor实现word图片自动转存
    wangEditor实现word图片自动转存
    xhEditor实现word图片自动转存
    TinyMCE实现word图片自动转存
    FCKEditor实现word图片自动转存
    CKEditor实现word图片自动转存
    Nginx大文件(百M以上)的上传下载实现技术
    百度WebUploader大文件(百M以上)的上传下载实现技术
    SpringCloud大文件(百M以上)的上传下载实现技术
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12171410.html
Copyright © 2011-2022 走看看