Anagrams

描述
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
分析
Anagram(回文构词法)是指打乱字母顺序从而得到新的单词,比如 "dormitory" 打乱字母顺
序会变成 "dirty room" ,"tea" 会变成"eat"。
回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。
因此,将几个单词按照字母顺序排序后,若它们相等,则它们属于同一组 anagrams 。
代码

 1 import java.util.ArrayList;
 2 import java.util.HashMap;
 3 import java.util.*;
 4 
 5 public class Anagrams {
 6 
 7     public static void main(String[] args) {
 8         // TODO Auto-generated method stub
 9         //用map的键存有序字母,再有与之一样的就输入
10         String[] strs = { "tea","dormitory","eat","dirtyroom"};
11         ArrayList<String> result = anagrams(strs);
12         for (String s : result) {
13             System.out.println(s);
14         }
15     }
16 
17     public static ArrayList<String> anagrams(String[] strs) {
18         ArrayList<String> result = new ArrayList<String>();
19         if (strs == null || strs.length == 0) 
20             return result;
21             HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
22             for (String s : strs) {
23                 char[] temp = s.toCharArray();
24                 Arrays.sort(temp);
25                 String tempstr = new String(temp);
26 
27                 if (map.containsKey(tempstr)) {
28                     if (map.get(tempstr).size() == 1) {// ArrayList的长度
29                         result.add(map.get(tempstr).get(0));  //将之前的单词也输入进
30                     }
31                     map.get(tempstr).add(s);
32                     result.add(s);
33                 } else {
34                     ArrayList<String> templist = new ArrayList<String>();
35                     templist.add(s);
36                     map.put(tempstr, templist);
37                 }
38             }
39             return result;
40         }
41     
42 }
原文地址:https://www.cnblogs.com/ncznx/p/9260850.html