Anagrams

Posted ncznx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 









以上是关于Anagrams的主要内容,如果未能解决你的问题,请参考以下文章

从 list-codewars 问题中查找单词的 Anagrams

49. Group Anagrams(js)

刷题49. Group Anagrams

Leetcode——————Group Anagrams

算法训练 Anagrams问题

[leetcode]438. Find All Anagrams in a String找出所有变位词