在一份文本文件中,查找其中所有的anagram。例如,如果这份文件中包含了stop、tops、pots这样三个单词,这三个词就是一组anagram,这三个单词都是由s、t、o、p这四个字母组成的。这份文件中可能存在多组anagram,大小写视为同样字符。在解答时,需要注意代码的效率、质量。当不能给出完整代码时,可以描述解题思路。 注意到每组anagram的字母在忽略组合顺序与大小写时完全相同 可以考虑对单词做如下转换,将一组anagram映射到唯一一个字符串上 转换方法,最简单的是将单词的各个字母变成小写,在按照字母顺序排序 如下: XkLs→klsx
SUN给了一个思路:List+Map来实现MultiHashMap. - package littlejava;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Set;
- public class MultiHashMap4Word
- {
- /**
- * 从输入的字符串数组中得到Anagram
- * 假定:字符串全部都是由a-z、A-Z组成的
- *
- * @param strArray
- * @return HashMap
- */
- public static HashMap> searchAllAnagram(String[] strArray)
- {
-
- HashMap>wordMap=new HashMap>();
-
-
- for (int i = 0 ; i < strArray.length ; i++)
- {
- String word = strArray[i];
- String key = convertWord(word);
- if(wordMap.containsKey(key))//如果key已经加进去
- {
- wordMap.get(key).add(word);
- }
- else
- {
- ArrayList temp=new ArrayList();
- temp.add(word);
- wordMap.put(key, temp);
- }
-
- }
- return wordMap;
-
-
- }
-
- public static String convertWord(String word)
- {
- if (word == null){
- return "";
- }
-
- char[] charArray = word.toLowerCase().toCharArray();
- Arrays.sort(charArray);
- return String.valueOf(charArray);
- }
-
- public static void main(String[] args)
- {
- String[] strArray = new String[]{
- "abc", "BcA", "Cba", "abcd", "BBcA", "aXbB", "zzxYyy", "yyZzxy",
- "rsuT", "turS", "fix", "xiF", "dcna", "abcd"
- };
-
- HashMap>wordMap = searchAllAnagram(strArray);
-
- Iterator it = wordMap.entrySet().iterator();
- int i=0;
- while(it.hasNext())
- {
- Map.Entry entry = (Entry) it.next();
- ArrayListalist = (ArrayList) entry.getValue();
- System.out.println("=========Anagram " + i + " : =========");
- for(int j=0;j
- {
- System.out.println(alist.get(j));
- }
- i++;
- }
-
- }
- }
输出:
=========Anagram 0 : =========
zzxYyy
yyZzxy
=========Anagram 1 : =========
rsuT
turS
=========Anagram 2 : =========
abc
BcA
Cba
=========Anagram 3 : =========
fix
xiF
=========Anagram 4 : =========
BBcA
=========Anagram 5 : =========
dcna
=========Anagram 6 : =========
abcd
abcd
=========Anagram 7 : =========
aXbB
阅读(1112) | 评论(0) | 转发(0) |