zoukankan      html  css  js  c++  java
  • leetcode937-java

    937. 重新排列日志文件

    一个简单题让我做了将近一个小时去。。

    你有一个日志数组 logs。每条日志都是以空格分隔的字串。

    对于每条日志,其第一个字为字母数字标识符。然后,要么:

    • 标识符后面的每个字将仅由小写字母组成,或;
    • 标识符后面的每个字将仅由数字组成。

    我们将这两种日志分别称为字母日志和数字日志。保证每个日志在其标识符后面至少有一个字。

    将日志重新排序,使得所有字母日志都排在数字日志之前。字母日志按字母顺序排序,忽略标识符,标识符仅用于表示关系。数字日志应该按原来的顺序排列。

    返回日志的最终顺序。

    示例 :

    输入:["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
    输出:["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]
    

    提示:

    1. 0 <= logs.length <= 100
    2. 3 <= logs[i].length <= 100
    3. logs[i] 保证有一个标识符,并且标识符后面有一个字。
    class Solution {
        class MyString{
        String all;
        String part;
        public MyString(String all,String part){
            this.all=all;
            this.part=part;
        }
        
    }
        public String[] reorderLogFiles(String[] logs) {
        String[]result=new String[logs.length];
            int count=0;
            List<String>numList=new ArrayList<String>();
            String before=null;
            String key=null;
            List<MyString>mystring=new ArrayList<MyString>();
            for(int i=0;i<logs.length;i++){
               String[]tmp=logs[i].split(" ");
                if(tmp[1].charAt(0)>='0'&&tmp[1].charAt(0)<='9')
                    numList.add(logs[i]);
                else{
                    String ch[]=logs[i].split(tmp[0]+" ");
                   MyString str=new MyString(logs[i],ch[1]);
                    mystring.add(str);
                }
                
            }
            int len=mystring.size();
           for(int i=0;i<len;i++){
               MyString str=mystring.get(0);
                key=mystring.get(0).all;
               before=mystring.get(0).part;
               
               for(int j=1;j<mystring.size();j++){
                   //System.out.println(before);
                  // System.out.println(mystring.get(j).part);
                   //System.out.println(mystring.get(j).part.compareTo(before)>=0);
                   if(mystring.get(j).part.compareTo(before)<0){
                       str=mystring.get(j);
                       key=mystring.get(j).all;
                       before=mystring.get(j).part;
                   }
               }
               mystring.remove(str);
               result[count++]=key;
               
           }
            for(int i=0;i<numList.size();i++)
                result[count++]=numList.get(i);
            return result;
            
        }
    }

     929. 独特的电子邮件地址

    每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。

    例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。

    除了小写字母,这些电子邮件还可能包含 ',' 或 '+'

    如果在电子邮件地址的本地名称部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"alice.z@leetcode.com” 和 “alicez@leetcode.com” 会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)

    如果在本地名称中添加加号('+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如 m.y+name@email.com 将转发到 my@email.com。 (同样,此规则不适用于域名。)

    可以同时使用这两个规则。

    给定电子邮件列表 emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?

    示例:

    输入:["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
    输出:2
    解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。
    

    提示:

    • 1 <= emails[i].length <= 100
    • 1 <= emails.length <= 100
    • 每封 emails[i] 都包含有且仅有一个 '@' 字符。
      public int numUniqueEmails(String[] emails) {
            Set<String>set=new HashSet<String>();
            for(int i=0;i<emails.length;i++){
                String[]tmp=emails[i].split("@");
                String yu=tmp[1];
                String name=tmp[0];
                String[]tmp2=name.split("/+");
                String nameFinal[]=tmp2[0].split(".");
                String re="";
                for(int j=0;j<nameFinal.length;j++)
                    re+=nameFinal[j];
                re+=yu;
                if(!set.contains(re))
                    set.add(re);
            }
            return set.size();
        }

    思路很简单,就是用String效率很低

  • 相关阅读:
    getopt 命令行参数解析
    Linux下使用indent整理代码
    终端常用快捷键
    gedit 乱码解决
    linux sysrq
    linux下的文件审计功能(audit inotify)
    gdb基本命令
    linux shell 字符截断
    linux 设置时间 date命令
    Ubuntu 时间同步
  • 原文地址:https://www.cnblogs.com/HannahLihui/p/10160563.html
Copyright © 2011-2022 走看看