- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是一个不太有经验的程序员。我写了一个字谜程序,唯一的问题是它不够快。有人告诉我,我的嵌套 for loop
是问题所在,但我不知道如何解决它( set1
是一个 HashSet
以及我正在处理的所有单词, map 是一个 LinkedHashMap<String, String>
和 anagram a TreeMap<String, TreeSet<String>>
):
for (String element : set1) {
char[] woord = element.toCharArray(); //alfabetical order of each word
Arrays.sort(woord);
String chartostring = new String(woord);
map.put(element, chartostring); // add each word with its sorted letters
TreeSet<String> order_words = new TreeSet<String>(); //creating list of anagrams
for (String o : map.keySet()) { //for each word
if (map.get(o).equals(chartostring)) { //check if there is a value in map which is equal to the sorted letters
order_words.add(o); //add word to list of anagrams
if (order_words.size() > 1) { //we want anagrams so only print if there are atleast 2 words
anagram.put(chartostring, order_words);
}
}
}
}
有人可以帮帮我吗?非常感谢。
最佳答案
嵌套循环确实很慢,因为您将 map 当作列表来迭代。如果您可以用 HashMap 中的快速查找来替换嵌套循环,那不是很好吗?不幸的是,当您处理 Map<String,String>
时,这不是一个选项。 ,因为多个单词将具有相同的排序表示。这就是为什么您构建了一个从单词到其排序表示的映射,而不是相反。
然而,这意味着您可以构建一个从排序表示到单词列表的映射:
Map<String,List<String>> sortedRepToWords
您可以在进行任何匹配之前在单个循环中构建此 map 。有了这个列表映射,您可以消除嵌套循环,将其替换为从 sortedRepToWords
中查找整个列表。 .
关于java - 我怎样才能使字谜程序代码更快? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979149/
我的程序运行良好,这只是我需要的一个小建议;首先这是我的代码,用于检查两个单词是否是字谜;效果很好; #include int anagram_check(char [], char []); in
面试问题给定两个输入字符串,您只能交换字符串中的两个连续元素。您必须展示将一个字符串转换为另一个字符串的所有步骤(两个字符串将是彼此的字谜)。例如。口香糖到马克杯 古姆百货公司通用汽车大学微量气体发生
我正在尝试学习 Python。考虑这个简单的 C 语言变位词检查器: bool are_anagrams(const char* str1, const char* str2) { int str
(下面关于我的问题的代码) 根据 this stack overflow question我使用 Pegolon 的方法来生成 NSString 中一组字符的所有可能排列。但是,我现在试图让它不仅生成
testing if strings are anagrams有很多种方式.但是,我想知道是否有一种方法可以只对每个单词进行一次迭代?如果不是,在 Python 中最有效的方法是什么? 我们可以遍历第
我是一名优秀的程序员,十分优秀!