[LeetCode][Java] Anagrams

來源:互聯網
上載者:User

標籤:leetcode   java   anagrams   

題目:

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

題意:

給定一個字串數組,返回所有的易位構片語合。

注意:所有的輸入都是小寫。


演算法分析:

易位構詞其實也很好理解,就是兩個單詞所包含的字元和數量都是一樣的,只是順序不同

對字串中各字母進行排序,那麼互為重排列的字串就會相等。

按照上述思路,用一個map紀錄按字母排序後的字串及其出現位置(或原字串),在遍曆過程中,如果遇到排序後的字串相等的,就說明兩者互為重排列。

第一次出現的重排列字串需要特殊照顧下,下述代碼中用-1標識第一次出現的重排列字串是否已經加入結果。

此外,對字串按字母排序的方法可以用Java類庫的char數組排序;也可以利用題目所說的字串中只含有小寫字母這一資訊,進行計數排序


AC代碼:

  public ArrayList<String> anagrams(String[] strs)   {    ArrayList<String> list = new ArrayList<String>();    HashMap<String, Integer> map = new HashMap<String, Integer>();        for (int i = 0; i < strs.length; ++i)     {      char[] chars = strs[i].toCharArray();            Arrays.sort(chars);            String anagram = new String(chars);            if (map.containsKey(anagram))       {        int index = map.get(anagram);        if (index != -1)        {          list.add(strs[index]);          map.put(anagram, -1);//用-1標識第一次出現的重排列字串        }        list.add(strs[i]);      }       else         map.put(anagram, i);    }    return list;   }


著作權聲明:本文為博主原創文章,轉載註明出處

[LeetCode][Java] Anagrams

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.