我试图找到给定段落中最大的字谜。假设我提供了一个包含单词的字符串。现在我想找到所有字谜,在所有字谜中我想要返回所有最大字谜的列表。
例如,
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;
}
答案 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)