如何在Java中找到给定段落中的最大字谜

时间:2012-12-20 09:20:28

标签: java collections arraylist core

我试图找到给定段落中最大的字谜。假设我提供了一个包含单词的字符串。现在我想找到所有字谜,在所有字谜中我想要返回所有最大字谜的列表。

例如,

String s = "Hello jjkkllmm how are you. See you at lljjmmkk tomorrow with kkjjmmll. ootty tyoto"

这里的词语 jjkkllmm lljjmmkk kkjjmmll ,* ootty和 tyoto 是字谜,其中包括单词 jjkkllmm lljjmmkk kkjjmmll 大小相等,所以我的方法应该返回所有最大且大小相同的anagram单词。< / p>

我尝试了以下代码,但我不知道它是否是完美的解决方案,或者是否可以改进。

public static Set<String> findAllAnagram(String words)
{
    Map<String,String> tempMap = new HashMap<String,String>();
    Set<String> allAnagrams = new LinkedHashSet<String>();
    String[] wordArr = words.split(" ");

    for (String string : wordArr)
    {
        if(tempMap.containsKey(sort(string)))
        {
            allAnagrams.add(tempMap.get(sort(string)));
            allAnagrams.add(string);
        }
        else
        {
            tempMap.put(sort(string), string);
        }
    }
    return allAnagrams;
}

public static String findBiggestAnagram(String word)
{
    Set<String> allAnagrams =findAllAnagram(word);
    int biggestAnnagramCount = 0;
    String biggestAnnaGramWord = "";
    for (String string : allAnagrams)
    {
        if(biggestAnnagramCount<string.length())
        {
            biggestAnnaGramWord = string;
            biggestAnnagramCount=string.length();
        }
    }
    return biggestAnnaGramWord;
}

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是为每个anagram建立一个密钥。

一个显而易见的是通过小写和排序字母(“看”=&gt;“ees”)来构建。

使用HashMap<String, List<String>>保留anagram的所有版本,您将迭代单词以将其链接到其键。

之后,你只需要在列表中包含多个元素的那个中使用最大的键。

答案 1 :(得分:1)

按空格分割字符串,并在对字符串进行排序后将每个单词添加到集合中,该字符串在添加到set之后返回false实际上是anagram,因为它已经添加了。

   char[] chars = original.toCharArray();
   Arrays.sort(chars);
   String sorted = new String(chars);
   set.add(sorted)