-2

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

例如,

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

这里jjkkllmmlljjmmkkkkjjmmll、 *ootty 和tyoto是字谜,其中jjkkllmmlljjmmkkkkjjmmll是最大且大小相等的字词,因此我的方法应返回所有最大且大小相同的字谜词。

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

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;
}
4

2 回答 2

2

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

通过小写和排序字母(“See”=>“ees”)可以构建一个明显的方法。

使用 aHashMap<String, List<String>>来保留字谜的所有版本,您将遍历单词以将它们链接到它们的键。

之后,您只需在列表中具有多个元素的键中取最大键。

于 2012-12-20T09:23:30.097 回答
1

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

   char[] chars = original.toCharArray();
   Arrays.sort(chars);
   String sorted = new String(chars);
   set.add(sorted)
于 2012-12-20T13:48:09.960 回答