leetcode937-java

937. 從新排列日誌文件數組

一個簡單題讓我作了將近一個小時去。。this

你有一個日誌數組 logs。每條日誌都是以空格分隔的字串。spa

對於每條日誌,其第一個字爲字母數字標識符。而後,要麼:日誌

  • 標識符後面的每一個字將僅由小寫字母組成,或;
  • 標識符後面的每一個字將僅由數字組成。

咱們將這兩種日誌分別稱爲字母日誌和數字日誌。保證每一個日誌在其標識符後面至少有一個字。code

將日誌從新排序,使得全部字母日誌都排在數字日誌以前。字母日誌按字母順序排序,忽略標識符,標識符僅用於表示關係。數字日誌應該按原來的順序排列。blog

返回日誌的最終順序。排序

 

示例 :leetcode

輸入:["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"]

 

提示:rem

  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. 獨特的電子郵件地址get

每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。

例如,在 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效率很低

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息