1. 程式人生 > >LeetCode Anagrams My solution

LeetCode Anagrams My solution

not question .so trac group maps inline 每一個 splay

Anagrams

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

Note: All inputs will be in lower-case.

我的解題思路是這種:1.事實上所謂的anagrams就是字母同樣就ok了

2.把每一個數組裏面的數字以字典序進行又一次排序形成fingerprint

3.推斷排序過得串是否在hashmap裏面,假設在裏面就加一,說明這個fingerprint 有了

有的話表明這個fingerprint相應的String是anagrams

4.用strs裏面的string 掃一下map ,假設fingerprint相應的數目大於1,

則表示這個String就是所要的了,記錄結果就好。

用到的函數

String.toCharArray();

Arrays.toString();

Hashmap.containsKey();

Hashmap.put(String,Integer);


public class Solution {
    public List<String> anagrams(String[] strs) {
        List<String> result = new ArrayList<String>();
        if (strs == null || strs.length == 0 ) {
            return result;
        }
     HashMap<String,Integer> hmaps = new HashMap<String,Integer>();
     
     for (int i = 0; i < strs.length; i++) {
         String curSort = sortString(strs[i]);
         if (hmaps.containsKey(curSort)) {
           hmaps.put(curSort, hmaps.get(curSort) + 1);   
         } else {
           hmaps.put(curSort, 1); 
         }
     }
     for(int i = 0; i < strs.length; i++) {
         if (hmaps.containsKey(sortString(strs[i])) && hmaps.get(sortString(strs[i])) > 1) {
             result.add(strs[i]);
         }
     }
     return result;
    }
    String sortString(String str) {
        char [] charArr = str.toCharArray();
        Arrays.sort(charArr);
        return Arrays.toString(charArr);
    }
}


LeetCode Anagrams My solution