-2

特定の段落で最大のアナグラムを見つけようとしています。単語を含む文字列が提供されたとします。ここで、すべてのアナグラムを検索し、すべてのアナグラムの中で最大のアナグラムのリストを返したいと考えています。

例えば、

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

ここで、単語jjkkllmmlljjmmkkkkjjmmll、 *ootty 、およびtyotoはアナグラムです。その中で単語jjkkllmmlljjmmkk、およびkkjjmmllは最大で同じサイズであるため、私のメソッドはすべての最大かつ同じサイズのアナグラム単語を返す必要があります。

私は自分の側から以下のコードを試しましたが、それが完璧な解決策なのか、それとも改善できるのかわかりません。

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")。

アナグラムのすべてのバージョンを保持するためにを使用しHashMap<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 に答える