題目:
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
題解:
這道題看所給的字串陣列裡面有多少個是同一個變形詞變的。這道題同樣使用HashMap來幫助存老值和新值,以及幫忙判斷是否是變形詞。
首先對每個string轉換成char array然後排下序,HashMap裡面的key存sort後的詞,value存原始的詞。然後如果這個排好序的詞沒在HashMap中出現過,那麼就把這個sorted word和unsortedword put進HashMap裡面。如果一個sorted word是在HashMap裡面存在過的,說明這個詞肯定是個變形詞,除了把這個詞加入到返回結果中,還需要把之前第一個存進HashMap裡面的value存入result中。
程式碼如下:
1 public ArrayList<String> anagrams(String[] strs) {
2 ArrayList<String> result=new ArrayList<String>();
3
4 if (strs==null||strs.length==0)
5 return result;
6
7 HashMap<String,ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();
8
9 for (String s:strs){
10 char[] temp=s.toCharArray();
11 Arrays.sort(temp);
12 String tempStr=new String(temp);
13
14 if (hm.containsKey(tempStr)){
15 if(hm.get(tempStr).size() == 1)
16 result.add(hm.get(tempStr).get(0));
17 hm.get(tempStr).add(s);
18 result.add(s);
19 }else{
20 ArrayList<String> tempList=new ArrayList<String>();
21 tempList.add(s);
22 hm.put(tempStr, tempList);
23 }
24 }
25 return result;
26 }
2 ArrayList<String> result=new ArrayList<String>();
3
4 if (strs==null||strs.length==0)
5 return result;
6
7 HashMap<String,ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();
8
9 for (String s:strs){
10 char[] temp=s.toCharArray();
11 Arrays.sort(temp);
12 String tempStr=new String(temp);
13
14 if (hm.containsKey(tempStr)){
15 if(hm.get(tempStr).size() == 1)
16 result.add(hm.get(tempStr).get(0));
17 hm.get(tempStr).add(s);
18 result.add(s);
19 }else{
20 ArrayList<String> tempList=new ArrayList<String>();
21 tempList.add(s);
22 hm.put(tempStr, tempList);
23 }
24 }
25 return result;
26 }