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的主要内容,如果未能解决你的问题,请参考以下文章